C# 在C中对SQLite执行查询#
我试图在C#中从SQLite查询一些数据,尽管没有返回任何内容[并且它应该返回此表中的数据] 这是我试图连接到SQLite并执行查询的代码中的一部分。正如我提到的,没有数据返回。我也尝试过插入,但没有添加条目C# 在C中对SQLite执行查询#,c#,.net,visual-studio-2010,sqlite,C#,.net,Visual Studio 2010,Sqlite,我试图在C#中从SQLite查询一些数据,尽管没有返回任何内容[并且它应该返回此表中的数据] 这是我试图连接到SQLite并执行查询的代码中的一部分。正如我提到的,没有数据返回。我也尝试过插入,但没有添加条目 SetConnection(); sql_con.Open(); myQuery = "Select * from myTable WHERE myColumn LIKE '" + myName+ "%
SetConnection();
sql_con.Open();
myQuery = "Select * from myTable WHERE myColumn LIKE '" + myName+ "%';";
sql_cmd = sql_con.CreateCommand();
sql_cmd.CommandText = myQuery;
rw_maxid = (long)sql_cmd.ExecuteScalar();
sql_con.Close();
这个代码有什么问题?有任何建议/文档/更正吗?调试情况如何?标量查询只返回第一行的第一列
这假定要从中获取最大值的列名为id,并且是长的
try
{
SetConnection();
sql_con.Open();
sql_cmd = sql_con.CreateCommand();
myQuery = "Select max(id) from myTable;";
Debug.WriteLine(myQuery);
sql_cmd.CommandText = myQuery;
rw_maxid = (long)sql_cmd.ExecuteScalar();
myQuery = "Select max(id) from myTable WHERE myColumn LIKE '" + myName+ "%';";
Debug.WriteLine(myQuery);
sql_cmd.CommandText = myQuery;
rw_maxid = (long)sql_cmd.ExecuteScalar();
}
catch (Exception Ex)
{
Debug.WriteLine(Ex.message);
}
finally
{
sql_con.Close();
}
用于从sqlite数据库中选择数据:
public DataTable GetValueFromDatabase(string query)
{
const string connectionString = "Data Source=DatabaseName;Version=3;";
using(var ds = new DataSet())
{
using(var da = new SQLiteDataAdapter(query, connectionString))
{
using(var tran = new TransactionScope())
{
ds.Clear();
da.Fill(ds);
DataTable dt = ds.Tables[0];
tran.Complete();
return dt;
}
}
}
}
上面的方法返回一个DataTable,您可以从中获取值。
然而,这个解决方案并没有为sql注入问题提供解决方案
调用函数,如下所示:
var dt = GetValueFromDatabase("Select * from myTable WHERE myColumn LIKE '" + myName+ "%';");
首先使用SQLiteParameters,可以提供更清晰的查询并防止sql注入。是否键入错误
xtQuery
和txtQuery
?@Max Mommersteeg:SQLiteParameters的任何示例?您的查询中存在一个巨大的sql注入缺陷。您应该使用参数化查询。回显sql以查看发送的内容。错误14找不到类型或命名空间名称“TransactionScope”(您是否缺少using指令或程序集引用?@Dalek请尝试在代码顶部添加此项:using System.Transactions代码>同时添加:使用System.Transactions;使用系统数据;使用System.Data.SQLite;在终端运行中:“dotnetaddpackagesystem.Data.SQLite.Core”