#c# #.net #sql #sql-server-ce
#c# #.net #sql #sql-server-ce
Вопрос:
Я создал *.sdf
файл, защищенный паролем, используя Visual Studio, работал нормально. Я вставил некоторые данные и попытался прочитать с помощью редактора Visual Studio SQL, но когда я перешел к коду C #, это не сработало.
Я попробовал следующее:
using System;
using System.Data.SqlServerCe;
class Program
{
static void Main(string[] args)
{
var conStr = @"data source=C:pathdb.sdf; password=<...>";
SqlCeConnection con = new SqlCeConnection(conStr);
con.Open();
SqlCeCommand cmd = con.CreateCommand();
cmd.CommandText = "select * from Cookies";
cmd.CommandType = System.Data.CommandType.TableDirect;
cmd.Connection = con;
SqlCeDataReader result = cmd.ExecuteReader();
//...
con.Close();
}
}
Я получаю следующую ошибку:
The specified table does not exist. [ select * from Cookies ]
Структура таблицы
Это возвращает false. Кто-нибудь может указать на мою ошибку?
Заранее спасибо.
Комментарии:
1. Удален тег «sqlite» —
.sdf
файл является базой данных SQL Server Compact Edition — не имеет ничего общего сsqlite
2. Когда вы говорите «не работает» — это ошибка? Вы не получаете данные, которые ожидаете? Что происходит?
3. @sq33G:
data.Read()
возвращаетfalse
4. Что происходит, когда вы устанавливаете CommandType в TableDirect, а CommandText — в имя вашей таблицы?
5. Проверьте свою папку bin .. там должна быть база данных sqlce, и это та, в которой есть таблица Cookies.
Ответ №1:
Ваша проблема в том, что вы указываете System.Data.CommandType.TableDirect
.
Когда вы измените свой код, чтобы использовать следующий, вы избежите ошибки, которую вы видите.
cmd.CommandType = System.Data.CommandType.Text;
Вы даже можете исключить настройку CommandType
свойства, поскольку Text
оно используется по умолчанию.
TableDirect
является устаревшим типом команд OLEDB. Не используйте ее, если ваша команда не является только именем таблицы или представления. Внутренне объект command создаст SELECT * FROM
инструкцию, выбирая все поля и все записи из указанной таблицы или представления.