我错过了数据库的这些错误

Posted

技术标签:

【中文标题】我错过了数据库的这些错误【英文标题】:I missed these mistakes with database 【发布时间】:2019-03-20 16:57:25 【问题描述】:

我错过了这些错误:

System.ArgumentException: Keyword not supported: 'initial catalog'.
   at System.Data.SqlServerCe.SqlCeConnectionStringBuilder.GetIndex(String keyword)
   at System.Data.SqlServerCe.SqlCeConnectionStringBuilder.set_Item(String keyword, Object value)
   at System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value)
   at System.Data.SqlServerCe.SqlCeConnectionStringBuilder..ctor(String connectionString)
   at System.Data.SqlServerCe.SqlCeConnection.set_ConnectionString(String value)
   at System.Data.SqlServerCe.SqlCeConnection..ctor(String connectionString)
   at Task5.Data.SqlRepository`1.GetTable(String where) in D:\Task5\Task5.Data\Repositories\SqlRepository.cs:line 96
   at Task5.Data.SqlRepository`1.Select() in D:\Task5\Task5.Data\Repositories\SqlRepository.cs:line 39
   at Task5.Data.Services.EntityDataService.CategoryList() in D:\Task5\Task5.Data\Services\EntityDataService.cs:line 32
   at Task5.Program.Step1() in D:\Task5\Task5\Program.cs:line 74

我的代码哪里出错:

private List<TEntity> GetTable(string where = null)

    var query = $"select * from GetTableName() where";

    var dataTable = new DataTable();
    using(var sqlConnection = new SqlCeConnection(connectionString))
    
        SqlCeDataAdapter sqlDA = new SqlCeDataAdapter(query, sqlConnection);
        sqlDA.Fill(dataTable);
    

    var entityList = new List<TEntity>();
    foreach (DataRow row in dataTable.Rows)
    
        var entity = new TEntity();
        foreach (DataColumn column in dataTable.Columns)
        
            var value = row[column.ColumnName];
            typeof(TEntity).GetProperty(column.ColumnName).SetValue(entity, value);
        

        entityList.Add(entity);
    

    return entityList;
 

【问题讨论】:

我真的无法理解你在这里问的是什么。 Keyword not supported: 'initial catalog' 错误消息似乎很清楚。您的项目中的“初始目录”在哪里? SQL CE 不支持该配置选项。 @Amy 不,我有 InstallDB.sql @Amy 不清楚我有什么问题。如果您知道错误在哪里,请点按您的手指 Keyword not supported: 'initial catalog' 您在连接字符串中看到短语“初始目录”吗? 【参考方案1】:

正如@Amy 所指出的,错误消息非常简单。这看起来像是您的连接字符串有问题,因为您可能正在尝试将 SQL Server 连接字符串与 SQL CE 数据库一起使用。我相信格式应该是这样的:

Data Source=MyData.sdf;Persist Security Info=False;

有关 SQL CE 连接字符串的更多详细信息,请参阅 this link。

编辑

如果您实际上使用的是 SQL 数据库(Express 或其他),那么您使用了错误的库来连接它。您正在使用不支持 SQL Express 连接字符串的 SqlCeConnection。你应该使用SqlConnectionSqlDataAdapter

注意:我在没有测试的情况下编辑了这个

private List<TEntity> GetTable(string where = null)

    var query = $"select * from GetTableName() where";

    var dataTable = new DataTable();
    using(var sqlConnection = new SqlConnection(connectionString))
    
        SqlDataAdapter sqlDA = new SqlDataAdapter(query, sqlConnection);
        sqlDA.Fill(dataTable);
    

    var entityList = new List<TEntity>();
    foreach (DataRow row in dataTable.Rows)
    
        var entity = new TEntity();
        foreach (DataColumn column in dataTable.Columns)
        
            var value = row[column.ColumnName];
            typeof(TEntity).GetProperty(column.ColumnName).SetValue(entity, value);
        

        entityList.Add(entity);
    

    return entityList;
 

【讨论】:

否,数据库 - Microsoft SQL Server 查询文件 (.sql) 参见上面的编辑,如果您使用的是 SQL 而不是 SQL CE,那么您的代码是错误的。请注意,在未来的问题中包含这些详细信息将有助于用户更好地回答您的问题并提供准确的解决方案。

以上是关于我错过了数据库的这些错误的主要内容,如果未能解决你的问题,请参考以下文章

师妹从我这里白嫖这些面经,直呼差点错过BAT!

区块链这些技术与h5房卡斗牛平台出售,大数据基础软件干货不容错过

在我错过了颤振应用程序后,有啥办法可以回到我的旧 Xcode

使用 flutter_twitter 包的 Flutter Web Twitter 登录错误。我错过了啥?

聊聊我这些年错过的一些机遇

我如何确定不会错过 WebSockets 上的“打开”事件? [复制]