简体   繁体   English

如何在C#中修复SQLite查询?

[英]How can I fix my SQLite query in C#?

I try to create a datagridview query. 我尝试创建一个datagridview查询。 But I have some syntax error on SQLite and I don't know how to fix my query. 但是我在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;
            }

        }

Error is: 错误是:

System.Data.SQLite.SQLiteException (0x80004005): SQL logic error or missing database near "strftime": syntax error System.Data.SQLite.SQLiteException(0x80004005):SQL逻辑错误或“ strftime”附近缺少数据库:语法错误

I have the same application who work with MySql database and just copy this query from other application but SQLite syntax is different than MySQL ? 我有使用MySql数据库的同一应用程序,只是从其他应用程序复制此查询,但SQLite语法与MySQL不同吗?

I don't know where and how I can fix the query. 我不知道该在哪里以及如何解决该查询。

Sorry, I can't comment yet so I'll post this as an answer. 抱歉,我无法发表评论,因此将其发布为答案。

First, I agree with the comments above. 首先,我同意以上评论。 It's hard to help you with your problem with just the sample code you provided. 仅使用提供的示例代码很难帮助您解决问题。 Second, don't directly concatenate strings to your queries because there's a risk of SQL injection. 其次,不要将字符串直接连接到查询中,因为存在SQL注入的风险。

With that being said, I've had a few situations like this myself and my approach is to debug/test my queries directly in a query window. 话虽这么说,我本人也遇到过类似的情况,我的方法是直接在查询窗口中调试/测试查询。 I suggest that you separate your queries, "joined" by those UNIONs, provide actual values to them and run them one by one. 我建议您将由这些UNION“联接”的查询分开,为它们提供实际值,然后逐一运行它们。 If all works fine, run the queries altogether. 如果一切正常,请完全运行查询。 If everything works, then the problem must be in your concatenation. 如果一切正常,那么问题一定出在您的连接上。 I always like to approach my problem the "divide-and-conquer" way, I like to separate and eliminate possible causes. 我一直喜欢以“分而治之”的方式解决问题,我喜欢分离并消除可能的原因。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM