Я пропустил эти ошибки с базой данных - PullRequest
0 голосов
/ 20 марта 2019

Я пропустил эти ошибки:

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;
 }

1 Ответ

1 голос
/ 20 марта 2019

Как указала @Amy, сообщение об ошибке довольно простое.Это похоже на проблему со строкой подключения, так как вы, вероятно, пытаетесь использовать строку подключения SQL Server с базой данных SQL CE.Я считаю, что формат должен быть примерно таким:

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

См. эту ссылку для получения дополнительной информации о строках подключения SQL CE.

Edit

Если вы на самом деле используете базу данных SQL (Express или иным образом), то вы используете неверную библиотеку для подключения к ней.Вы используете SqlCeConnection, который не поддерживает строку подключения SQL Express.Вы должны использовать SqlConnection и SqlDataAdapter.

Примечание: я отредактировал это без тестирования вообще

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;
 }
...