【问题标题】:C# - SQLite Insufficient parameters supplied to the command errorC# - SQLite 提供给命令错误的参数不足
【发布时间】:2014-06-26 10:51:01
【问题描述】:

这很简单,但我看不出错误在哪里!该参数未添加到查询中。这是我的代码:

SQLiteDB db;
db = new SQLiteDB(Config.getMasterUsersDB());
DataTable masterUsers;
SQLiteCommand query = new SQLiteCommand("SELECT username , password , localDB FROM master_users WHERE username = @username");
query.Parameters.Add("@username", comboMasterUsers.SelectedItem.ToString());
masterUsers = db.GetDataTable(query.CommandText);

foreach (DataRow r in masterUsers.Rows)
{
     if (txtPassword.Text == r["password"].ToString())
     {
          Config.setLocalDB(r["localDB"].ToString());
          Config.setLoggedMasterUser(r["username"].ToString());

          this.Hide();
          formMain formMain = new formMain();
          formMain.Show();
     }
}

SQLiteDB 是一个帮助类,用于建立数据库连接和检索

public DataTable GetDataTable(string sql)
    {
        DataTable dt = new DataTable();
        try
        {
            SQLiteConnection cnn = new SQLiteConnection(dbConnection);
            cnn.Open();
            SQLiteCommand mycommand = new SQLiteCommand(cnn);
            mycommand.CommandText = sql;
            SQLiteDataReader reader = mycommand.ExecuteReader();
            dt.Load(reader);
            reader.Close();
            cnn.Close();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        return dt;
    }

为什么我得到提供给命令错误的参数不足?我也看不到任何错别字。

【问题讨论】:

    标签: c# sql sqlite parameters


    【解决方案1】:

    您将参数添加到第一个命令对象 (query),但随后创建了一个 第二个 对象 (mycommand),没有任何参数。

    您必须更改GetDataTable 才能将参数添加到它自己的对象中:

        ...
        string sql = "SELECT ... WHERE username = ?";
        db.GetDataTable(sql, comboMasterUsers.SelectedItem.ToString());
        ...
    
    public DataTable GetDataTable(string sql, params Object[] parameters)
    {
        ...
        mycommand.CommandText = sql;
        foreach (var value in parameters)
        {
            var param = mycommand.CreateParameter();
            param.Value = value;
            mycommand.Parameters.Add(param);
        }
        ...
    

    【讨论】:

    • 谢谢你,很好的回答。那么参数不是加到commandText中的吗?我以为是这样完成的,所以我将 commandText 发送到 GetDataTable。
    • 参数绕过任何解析并单独传递到数据库(否​​则,blob 将不起作用)。
    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多