簡體   English   中英

如何在C#中修復SQLite查詢?

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

我嘗試創建一個datagridview查詢。 但是我在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不同嗎?

我不知道該在哪里以及如何解決該查詢。

抱歉,我無法發表評論,因此將其發布為答案。

首先,我同意以上評論。 僅使用提供的示例代碼很難幫助您解決問題。 其次,不要將字符串直接連接到查詢中,因為存在SQL注入的風險。

話雖這么說,我本人也遇到過類似的情況,我的方法是直接在查詢窗口中調試/測試查詢。 我建議您將由這些UNION“聯接”的查詢分開,為它們提供實際值,然后逐一運行它們。 如果一切正常,請完全運行查詢。 如果一切正常,那么問題一定出在您的連接上。 我一直喜歡以“分而治之”的方式解決問題,我喜歡分離並消除可能的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM