【问题标题】:SQLite Insufficient parameters supplied to the commandSQLite 提供给命令的参数不足
【发布时间】:2018-12-16 05:24:06
【问题描述】:

通过向查询添加参数,DB.Fill(DS) 行上出现错误。 参数@id 正好等于查询的参数。 我搜索了很多,但所有解决方案都是关于参数名称的拼写错误。

SQLiteDataAdapter DB;      
DataSet DS = new DataSet();
DataTable DT = new DataTable();

SetConnection();
sqlCmd = sqlCon.CreateCommand();
string CommandText = "select * from Words where id = @id"; //query;
await sqlCon.OpenAsync();

sqlCmd.Parameters.AddWithValue("@id", 1);
DB = new SQLiteDataAdapter(CommandText, sqlCon);

DS.Reset();
await Task.Run(() => { DB.Fill(DS); });
DT = DS.Tables[0];
sqlCon.Close();
return DT;

更新 = 解决方案 正如@steve16351 所说,问题出在CommandText 上。 只需将查询添加到 sqlCmd 并将其作为 SQLiteDataAdapter 参数发送。

sqlCmd = sqlCon.CreateCommand();
sqlCmd.CommandText("select * from Words where id = @id"); //query; <<==  
await sqlCon.OpenAsync();
sqlCmd.Parameters.AddWithValue("@id", 1);
DB = new SQLiteDataAdapter(sqlCmd); <<==

【问题讨论】:

    标签: c# sqlite sql-parametrized-query


    【解决方案1】:

    Like 用于文本比较。您只需要匹配或不匹配,因此:

    string CommandText = "select * from Words where id = @id"; 
    

    【讨论】:

    • 感谢您的回答,但这不是答案。它再次引发错误。
    【解决方案2】:

    您没有使用已添加参数的 SQL 命令,而是直接传递了SQLiteDataAdapter 命令文本。使用接受命令对象的重载:

    sqlCmd.CommandText = "select * from Words where id = @id"; //query;
    sqlCmd.Parameters.AddWithValue("@id", 1);
    DB = new SQLiteDataAdapter(sqlCmd);
    

    这是一个更完整的例子:

    using (var conn = new SQLiteConnection(@"Data Source=c:\temp\mydbthatdoesnotexistyet.db;Version=3;"))
    {
        conn.Open();
    
        // create the words table
        var create = conn.CreateCommand();
        create.CommandText = "CREATE TABLE Words (Id INT, Word TEXT)";
        create.ExecuteNonQuery();
    
        // insert data to the table
        var populate = conn.CreateCommand();
        populate.CommandText = "INSERT INTO Words (Id, Word) VALUES (@Id, @Word)";
        populate.Parameters.AddWithValue("@Id", 1);
        populate.Parameters.AddWithValue("@Word", "abc");
        populate.ExecuteNonQuery();
    
        // select the data back from the table
        var select = conn.CreateCommand();
        select.CommandText = "SELECT Word FROM Words WHERE Id = @Id";
        select.Parameters.AddWithValue("@Id", 1);
    
        SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(select);
        DataSet data = new DataSet();
        dataAdapter.Fill(data);
        DataTable table = data.Tables[0];
    }
    

    【讨论】:

    • 引发此错误:System.NullReferenceException:'对象引用未设置为对象的实例。'甚至我已经添加了这一行:sqlCmd = new SQLiteCommand();
    • 我添加了一个完整的、工作最小的示例,也许这将帮助您了解问题所在。或者,将您的新代码添加到您的问题中。
    【解决方案3】:

    喜欢:

       string CommandText = "select * from Words where id = $id"; //query;
    

    之后:

       sqlCmd.Parameters.AddWithValue("$id", 1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多