2010-07-26 4 views
2

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

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

My 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; 
    } 

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

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

Paul

ответ

0

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

0

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

OT Предупреждение: SDF2.3 совместим с 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

* Все разработки устройства (кроме телефона) несовместимы с Studio 2010, поэтому обновление SDF не поможет. – ctacke

+0

спасибо за головы. –

Смежные вопросы