2017-05-11 52 views
0

該任務很簡單,有一個本地數據庫和一個應用程序,它通過它進行搜索並顯示一個包含結果的表。問題出在SQL查詢。我在Classes表中有3列,我只需要在應用程序的表中顯示2列,而第二個應限制字母數。 SQLite SQL管理器執行這個查詢並給了我正確的數據,但是c#給了我一個錯誤。sqlite c#substr調用錯誤

private void SearchButtonClick(object sender, RoutedEventArgs e) 
    { 

     base_connection.ConnectionString = "Data Source=New_test_base.db;Version=3;New=False;Compress=True;"; 
     base_connection.Open(); 
     sqlite_cmd= base_connection.CreateCommand(); 
     sqlite_cmd.CommandText = "select Tag, substr(Description, 1, 2) from Classes where Description = 'rty'";// "select * from Classes where Description = '"+ SearchString.Text+"'"; 

     DbData = sqlite_cmd.ExecuteReader(); 


     DbData.Read(); 
      string myreader = DbData["Tag"].ToString()+DbData["Description"].ToString(); 

      MessageBox.Show(myreader); 


    } 

錯誤是:指數超出大規模陣列的(不知道的措辭,我有俄羅斯VS) 我使用System.Data.SQLite;

回答

1

您可能需要在查詢中提供列別名「Description」。

private void SearchButtonClick(object sender, RoutedEventArgs e) 
{ 
    base_connection.ConnectionString = "Data Source=New_test_base.db;Version=3;New=False;Compress=True;"; 
    base_connection.Open(); 
    sqlite_cmd= base_connection.CreateCommand(); 
    sqlite_cmd.CommandText = "select Tag, substr(Description, 1, 2) as Description from Classes where Description = 'rty'";// "select * from Classes where Description = '"+ SearchString.Text+"'"; 

    DbData = sqlite_cmd.ExecuteReader(); 
    DbData.Read(); 
    string myreader = DbData["Tag"].ToString()+DbData["Description"].ToString(); 

    MessageBox.Show(myreader); 
} 
+0

OMG ..我甚至可以認爲這可能工作..謝謝) – chydik

+0

這將是我的建議,雖然我可能會使用不同的名稱別名(例如'DescripPrefix'),以避免任何我應該也想要整個描述領域的問題。根據類的工作方式,根據位置而不是名稱訪問(例如'DbData [1]'或'DbData [2]',具體取決於索引的起始位置)也可能起作用。 – TripeHound