2017-04-27 36 views
0

我尝试创建一个datagridview查询。但我有一些语法错误SQLite和 我不知道如何解决我的查询。我该如何解决C#中的SQLite查询问题?

 string command3 = ""; 
     for (int y = year1; y <= year2; y++) 
     { 
      if (y > year1) 
      { 
       command3 += " UNION "; 
      } 
      command3 += "SELECT 'Въведени' AS 'Въведени/Изчислени', Station AS '№ на станция', strftime('%Y',Dat) AS 'Година', 'НМ' AS 'НМ/СР/НГ', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=01) AS 'Януари', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=02) AS 'Февруари', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=03) AS 'Март', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " strftime('%m',Dat)=04) AS 'Април', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=05) AS 'Май', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=06) AS 'Юни', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=07) AS 'Юли', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=08) AS 'Август', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=09) AS 'Септември', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=10) AS 'Октомври', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=11) AS 'Ноември', (SELECT vkolmin FROM hydmes WHERE Station= '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat)=12) AS 'Декември'" 
      + "FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y 
      + " UNION" 
      + " SELECT 'Изчислени', Station, strftime('%Y',Dat), 'НМ', (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 01 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 02 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 03 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 04 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 05 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 06 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 07 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 08 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 09 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 10 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 11 LIMIT 1), (SELECT min(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 12 LIMIT 1)" 
      + "FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y 
      + " UNION" 
      + " SELECT 'Въведени', Station, strftime('%Y',Dat), 'СР', (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 01), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 02), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 03), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 04), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 05), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 06), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 07), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 08), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 09), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 10), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 11), (SELECT vkolsre FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 12)" 
      + "FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y 
      + " UNION" 
      + " SELECT 'Изчислени', Station, strftime('%Y',Dat), 'СР', (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 01 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 02 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 03 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 04 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 05 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 06 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 07 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 08 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 09 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 10 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 11 LIMIT 1), (SELECT avg(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 12 LIMIT 1)" 
      + "FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y 
      + " UNION" 
      + " SELECT 'Въведени', Station, strftime('%Y',Dat), 'НГ', (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 01), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 02), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 3), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 04), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 05), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 06), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 07), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 08), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 09), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 10), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 11), (SELECT vkolmax FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 12)" 
      + "FROM hydmes WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y 
      + " UNION" 
      + " SELECT 'Изчислени', Station, strftime('%Y',Dat), 'НГ', (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 01 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 02 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 03 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 04 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 05 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 06 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 07 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 08 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 09 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 10 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 11 LIMIT 1), (SELECT max(vkol) FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y + " and strftime('%m',Dat) = 12 LIMIT 1)" 
      + "FROM hyddnev WHERE Station = '" + comboBox1.SelectedItem.ToString() + "' and strftime('%Y',Dat) = " + y; 
     } 
     command3 += " group by strftime('%Y',Dat)"; 

     SQLiteDataAdapter insertDat3 = new SQLiteDataAdapter(command3, Connection); 
      using (DataTable dt3 = new DataTable()) 
      { 
       insertDat3.Fill(dt3); 
       dataGridView1.DataSource = dt3.DefaultView; 
      } 

     } 

错误是:

System.Data.SQLite.SQLiteException(0X80004005):SQL逻辑错误或丢失的数据库近 “的strftime”:语法错误

我有同样的使用MySql数据库的应用程序,只需从其他应用程序复制此查询,但SQLite语法与MySQL不同?

我不知道我在哪里以及如何修复查询。

+2

你可以制作[mcve]吗?我认为要包括一个玩具数据库的'.dump'(来自sqlite命令行工具),其中查询(固定时)显示你想要实现的内容。另外一个仅限SQL的查询应该是其中的一部分。 – Yunnosch

+0

那么你能帮助我还是不是? –

+0

为什么不分割查询并尝试逐个执行调试,这将有助于跟踪问题。 –

回答

0

对不起,我还不能评论,所以我会张贴这个答案。

首先,我同意上面的意见。只用您提供的示例代码很难帮助您解决问题。其次,不要将字符串直接连接到查询,因为存在SQL注入的风险。

说到这里,我已经有了一些像这样的情况,我的方法是直接在查询窗口中调试/测试我的查询。我建议你分开你的查询,由这些联盟“加入”,向他们提供实际的价值并逐一运行。如果一切正常,则完全运行查询。如果一切正常,那么问题必须在你的串联中。我总是喜欢以“分而治之”的方式处理我的问题,我喜欢分离并消除可能的原因。

+0

请理解,如果您还没有评论权限,请将您的评论写入一个答案,但在StackOverflow中不应该这样做,请注意,但另一方面,为了保护您免受downvotes的威胁:我认为这实际上是一个(有点勇敢的)答案,它与StackOverflow概念相匹配,为解决方案提供一些见解和步骤,而不必提供完整的解决方案。 – Yunnosch

+0

谢谢你让我知道。克贡献。下次我提出答案时,我会牢记这一点。 –