C# SQLite C错误:System.Data.SQLite.SQLiteException:“SQL逻辑错误无法识别的标记:“'Income”“”

C# SQLite C错误:System.Data.SQLite.SQLiteException:“SQL逻辑错误无法识别的标记:“'Income”“”,c#,sql,sqlite,C#,Sql,Sqlite,目前,我有一段代码在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.F

目前,我有一段代码在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];
        }
    }
但我遇到的问题是,表名将出现在SQL查询中,我一直遇到需要删除引号的问题

如果我这样做:

className.DBLoad("Income", IncomeData); 
然后发生以下错误:

System.Data.SQLite.SQLiteException:'SQL逻辑错误无法识别的标记:'Income'

我试着做:

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

但是我仍然得到相同的错误。所以现在我不知道该怎么办。

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

勾号是:'

我还建议您使用以下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);
参考资料:


据我所知,表名附近不需要勾号

勾号是:'

我还建议您使用以下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);
参考资料:


你的第一个片段没有打勾,那么为什么第二个片段会打勾呢,特别是在抱怨“收入”的消息中?这通常是个坏主意anyway@MakeStackOverflowGoodAgain勾号是什么意思?为什么在泛型查询中在变量tablename周围加单引号?tablename不应被视为字符串另外,请确保您的用户无法键入该变量的值,否则可能会发生错误,从{tableName}更改为$SELECT*@Matt.G这很有效。谢谢。你的第一个片段没有打勾,那么为什么第二个片段会打勾呢,特别是在抱怨“收入”的消息中?这通常是个坏主意anyway@MakeStackOverflowGoodAgain勾号是什么意思?为什么在泛型查询中在变量tablename周围加单引号?tablename应该不要将其视为字符串。顺便说一下,请确保您的用户无法键入该变量的值,否则可能会发生错误,从{tableName}@Matt.G将其更改为$SELECT*。这很有效。谢谢。