【发布时间】: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 这行得通。谢谢。