Я пропустил эти ошибки:
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 не поддерживает этот параметр конфигурации.
@ Эми нет, у меня есть InstallDB.sql
@ Эми Непонятно, в чем я ошибаюсь. Если вы знаете, где ошибка, нажмите пальцем
@ Эми Хорошо, я тупой. А можно подсказать что и где удалять?
@Amy connectionString = "Источник данных=.\\SQLExpress;Исходный каталог=Task5;Интегрированная безопасность=True;" что это может быть не так?
Keyword not supported: 'initial catalog'
Видите ли вы в строке подключения фразу «исходный каталог»?
Как отметила @Amy, сообщение об ошибке довольно простое. Это похоже на проблему со строкой подключения, поскольку вы, вероятно, пытаетесь использовать строку подключения SQL Server с базой данных SQL CE. Я считаю, что формат должен быть примерно таким:
Data Source=MyData.sdf;Persist Security Info=False;
Дополнительные сведения о строках подключения SQL CE см. в статье эта ссылка.
Редактировать
Если вы на самом деле используете базу данных 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;
}
Нет, база данных — файл запроса Microsoft SQL Server (.sql)
<add name = "DEFAULT" connectionString = "Data Source=.\\SQLExpress;Initial Catalog=Task5;Integrated Security=True;" имя_провайдера = "System.Data.SqlClient"/>
См. выше редактирование, если вы используете SQL, а не SQL CE, тогда ваш код неверен. Обратите внимание, что включение этих сведений в будущие вопросы поможет пользователям лучше отвечать на ваши вопросы и предлагать точные решения.
Я действительно не могу понять, что вы здесь спрашиваете.