Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中对SQLite执行查询#_C#_.net_Visual Studio 2010_Sqlite - Fatal编程技术网

C# 在C中对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+ "%

我试图在C#中从SQLite查询一些数据,尽管没有返回任何内容[并且它应该返回此表中的数据]

这是我试图连接到SQLite并执行查询的代码中的一部分。正如我提到的,没有数据返回。我也尝试过插入,但没有添加条目

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”