【问题标题】:SQLite C# Error: System.Data.SQLite.SQLiteException: 'SQL logic error unrecognized token: "'Income""'SQLite C# 错误:System.Data.SQLite.SQLiteException:'SQL 逻辑错误无法识别令牌:“'Income”“'
【发布时间】:2019-03-06 17:41:16
【问题描述】:

目前,我有一段代码在 DataGridView 中显示表格

using (SQLiteConnection con = new SQLiteConnection(DBC.connectionstring))
{
    con.Open();
    SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT * FROM Income", con);
    DataSet ds = new System.Data.DataSet();
    da.Fill(ds, "Info");
    IncomeData.DataSource = ds.Tables[0];                           
}

但是,因为我将不得不多次重用代码。我决定创建一个允许我这样做的新课程。如下图:

public void DBLoad(string tableName, DataGridView DGVname)
    {
        DBC = new DatabaseConnection();
        DBC.getConnection() // connects to .db file

        using (SQLiteConnection con = new SQLiteConnection(DBC.connectionstring))
        {
            con.Open();
            SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT * FROM '" + tableName + '"', con);
            System.Data.DataSet ds = new System.Data.DataSet();

            da.Fill(ds, "Info");
            DGVname.DataSource = ds.Tables[0];
        }
    }

但我遇到的问题是tableName 将出现在 SQL 查询中,我一直遇到需要删除引号的问题。

如果我这样做:

className.DBLoad("Income", IncomeData); 

然后出现如下错误:

System.Data.SQLite.SQLiteException: 'SQL 逻辑错误无法识别令牌:“'Income”"'

我试过了:

tableName = tableName.Replace("\"", string.Empty);

但我仍然遇到同样的错误。所以现在我不知道该怎么办了。

【问题讨论】:

  • 您的第一个 sn-p 不使用刻度线,那么为什么第二个使用刻度线,特别是考虑到抱怨 'Income' 的消息?无论如何,这通常是个坏主意
  • @MakeStackOverflowGoodAgain 打勾是什么意思?
  • 为什么在通用查询中将单引号括在变量 tablename 周围?不应将表名视为字符串。顺便说一句,请确保您的用户无法键入该变量的值,否则可能会发生坏事
  • 更改为$"SELECT * FROM {tableName}"
  • @Matt.G 这行得通。谢谢。

标签: c# sql sqlite


【解决方案1】:

据我所知,您不需要在表名附近打勾。

勾号是:'

我还建议您使用String.Format 方法如下替换查询中的表名:

String.Format("Select * FROM {0}",tableName);

所以这行代码:

SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT * FROM '" + tableName + '"', con);

应该是这样的:

SQLiteDataAdapter da = new SQLiteDataAdapter(String.Format("Select * FROM {0}",tableName), con);

参考资料:

SQLite SELECT - Querying data from a single table

String.Format Method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多