2017-05-11 55 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