SQLite C#错误:System.Data.SQLite.SQLiteException:'无法识别的SQL逻辑错误令牌:“'收入”“'

时间:2019-03-06 17:41:16

标签: 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.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);

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

1 个答案:

答案 0 :(得分:1)

据我所知,您不需要在表名旁边打勾。

  

勾是:'

我还建议您按以下方式使用def get_decrypted_stream(s3_object): region_name = 'us-east-1' encryptedImageBytes = s3_object.get()['Body'].read() print("Decoded file : {}".format(encryptedImageBytes)) client = boto3.client('kms', region_name=region_name) response = client.decrypt( CiphertextBlob=encryptedImageBytes) data = meta[u'Plaintext'] return io.BytesIO(data) 方法替换查询中的表名:

String.Format

这行代码:

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

应该是这样的:

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

参考文献:

SQLite SELECT - Querying data from a single table

String.Format Method