"в текущем диапазоне не найдено ни одного ключа, соответствующего описанным характеристикам"
Я использую SQL CE 4.0 и следующий код:
string sqlQuery = "SELECT TOP 10 " +
"tbl_Image.ImageID, tbl_Barcode.BarcodeValue, tbl_Image.ImageDateTime, tbl_Image.ImageFileName " +
"FROM " +
"tbl_Image " +
"JOIN tbl_Barcode on tbl_Image.ImageID = tbl_Barcode.ImageID " +
"WHERE " +
"tbl_Image.ImageID > @ImageID";
using (SqlCeCommand command = new SqlCeCommand(sqlQuery, sqlceServer.GetSqlConnection()))
{
command.Parameters.Add(new SqlCeParameter("@ImageID", SqlDbType.Int)).Value = imageID;
try
{
using (SqlCeDataReader rdr = command.ExecuteResultSet(ResultSetOptions.Scrollable))
{
if (rdr.HasRows)
{
while (rdr.Read())
{
Но я продолжаю получать ошибку:
"в текущем диапазоне не найдено ни одного ключа, соответствующего описанным характеристикам"
на этой линии:
using (SqlCeDataReader rdr = command.ExecuteResultSet(ResultSetOptions.Scrollable))
Я пытался изменить эту строку на различные варианты, но безрезультатно.
Мой sql ce db содержит две таблицы, созданные со следующей (выдержка):
string tblImage =
"CREATE TABLE [tbl_Image] (" +
"[ImageID] int IDENTITY (1,1) NOT NULL" +
", [ImageData] image NOT NULL" +
", [ImageDateTime] datetime NOT NULL" +
", [ImageFileName] nvarchar(4000) NOT NULL" +
", [SettingID] int NOT NULL" +
", [MultiPage] bit NOT NULL" +
");";
string tblBarcode =
"CREATE TABLE [tbl_Barcode] (" +
"[BarcodeID] int IDENTITY (1,1) NOT NULL" +
", [ImageID] int NOT NULL" +
", [BarcodeType] nvarchar(4000) NOT NULL" +
", [BarcodeValue] nvarchar(4000) NOT NULL" +
");";
string alterImageTable =
"ALTER TABLE [tbl_Image] ADD CONSTRAINT [PK_tbl_Image] PRIMARY KEY ([ImageID]);";
string alterBarcodeTable =
"ALTER TABLE [tbl_Barcode] ADD CONSTRAINT [PK_tbl_Barcode] PRIMARY KEY ([BarcodeID]);";
Я озадачен тем, в чем проблема - поиск ошибки, похоже, относится к проблемам репликации, которыми я не занимаюсь. Может кто-нибудь помочь, пожалуйста?
РЕДАКТИРОВАТЬ:
Выполнение запроса в SQL Server Compact Toolbox v4.0 работает без проблем и возвращает правильные данные.
1 ответ
Нашел решение.
Команда top должна иметь номер в скобках, т.е. TOP (10), а команда HasRows, очевидно, не поддерживается, поэтому удаление этой строки также позволяет запросу работать.