为什么我的查询没有返回结果? 我正在使用C#。 它返回列标题但没有行。我的select语句有问题吗?
这是我的代码:
conn = new SQLiteConnection("Data Source=local.db;Version=3;New=False;Compress=True;");
DataTable data = new DataTable();
SQLiteDataReader reader;
using (SQLiteTransaction trans = conn.BeginTransaction())
{
using (SQLiteCommand mycommand = new SQLiteCommand(conn))
{
mycommand.CommandText = "SELECT * FROM TAGTABLE WHERE TAG = '"+tag+"' ;";
reader = mycommand.ExecuteReader();
}
trans.Commit();
data.Load(reader);
reader.Close();
reader.Dispose();
trans.Dispose();
}
return data;
TAGTABLE
有以下字段:
TID int,
Tag varchar(500),
FilePath varchar(1000)
答案 0 :(得分:1)
您不需要该交易,请尝试以下操作:
DataTable data = new DataTable();
using (SQLiteConnection conn = new SQLiteConnection("Data Source=local.db;Version=3;New=False;Compress=True;"))
using (SQLiteCommand mycommand = new SQLiteCommand(conn))
{
mycommand.CommandText = "SELECT * FROM TAGTABLE WHERE TAG = @tag;";
mycommand.Parameters.AddWithValue("@tag", tag);
conn.Open();
using (SQLiteDataReader reader = mycommand.ExecuteReader())
{
data.Load(reader);
}
}
return data;
如果SELECT
没有产生任何结果,那么最有可能不返回任何内容的原因。
另请注意,实现IDisposable
接口的任何内容都可以与using
语句一起使用,因此不需要手动关闭/处理对象。
请注意,SQL已更改为使用参数化查询,这有助于降低SQL注入攻击的可能性,并且通常更清晰。
答案 1 :(得分:0)
由于您没有显示示例数据以及应该回溯一些常规指针:
tag
的值(例如,如果它包含'
),上述SQL语句将执行您不希望的事情using
中的所有内容都是假的(好事!)问题是,using
块内是否有异常抛出(请使用调试器检查)请显示一些带有参数值和预期结果的示例数据......