"в текущем диапазоне не найдено ни одного ключа, соответствующего описанным характеристикам"

Я использую 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, очевидно, не поддерживается, поэтому удаление этой строки также позволяет запросу работать.

Другие вопросы по тегам