использование SqlCEResultSet.Seek с составными ключами в SQL Server CE - PullRequest
2 голосов
/ 26 июля 2010

Может кто-нибудь показать мне, как я могу использовать метод SqlCeResultSet.Seek с составным индексом?

Я пытаюсь искать на orderno+product code.

Моя таблица SQL Server CE имеет следующий индекс:

CREATE INDEX orderline_idx ON OrderLines (orderno, item)

Мой код поиска

public bool SeekDeliveryLine(string delnote,string item)
{
        bool isFound = false;

        cmd = new SqlCeCommand();
        cmd.Connection = conn;
        cmd.CommandType = CommandType.TableDirect;
        cmd.CommandText = "OrderLines";
        cmd.IndexName = "orderline_idx ";

        try
        {
            //cmd.SetRange(DbRangeOptions.Match, new object[] { delnote }, null);
            deliveryRS = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);
            isFound = deliveryRS.Seek(DbSeekOptions.FirstEqual, new object[] { delnote, item });

            if (isFound)
            {
                deliveryRS.Read();
                currentRowData = this.RetrieveRecord();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        return isFound;
    }

Код всегда возвращает первую совпадающую строку заказа.

Заранее спасибо

Пол

Ответы [ 2 ]

0 голосов
/ 27 июля 2010

Спасибо за ваш ответ, оба поля являются строками.Я импортирую в бэкэнд, который хранит номер заказа в виде строки.Поле delnote просто имеет плохое имя (изначально я работал с номерами накладных и еще не реорганизовал имя переменной).У меня теперь работает этот код, я переписал его, как показано ниже, я не уверен, почему сохранение строк в объекте должно иметь какое-либо значение, но теперь он работает.с vs2010?мы скоро модернизируемся.

    public bool SeekOrderLine(object orderNum,object item)
    {
        bool isFound = false;

        cmd = new SqlCeCommand();
        cmd.Connection = conn;
        cmd.CommandType = CommandType.TableDirect;
        cmd.CommandText = "orderLines";
        cmd.IndexName = "orderline_idx";
        try
        {
            orderRS = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);
            isFound = orderRS.Seek(DbSeekOptions.FirstEqual, new object[] {orderNum, item});
            if (isFound)
            {
                orderRS.Read();
                currentRowData = this.RetrieveRecord();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        return isFound;
    }
0 голосов
/ 26 июля 2010

массив входных данных поиска должен быть объектами, которые равняются индексированным полям. Вы не можете искать в поле, которого нет в индексе. Похоже, у вас есть индекс по номеру и номеру заказа, который я бы назвал int и строкой, но вы передаете "delnote" и item, которые оба являются строками.

...