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

时间:2017-04-27 06:28:04

标签: c# mysql sql .net sqlite

我尝试创建一个datagridview查询。但我在SQLite和SQL上有一些语法错误 我不知道如何修复我的查询。

        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):“strftime”附近的SQL逻辑错误或缺少数据库:语法错误

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

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

1 个答案:

答案 0 :(得分:0)

很抱歉,我无法发表评论,所以我会将此作为答案发布。

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

话虽如此,我自己也有过这样的情况,我的方法是直接在查询窗口中调试/测试我的查询。我建议您将查询分开,加入&#34;通过这些UNION,为它们提供实际值并逐个运行它们。如果一切正常,请完全运行查询。如果一切正常,那么问题必须在你的连接中。我总是喜欢解决我的问题&#34;分而治之?&#34;我想分开并消除可能的原因。