错误一个或多个参数是必需的

Error one or more parameters is required

这是 C# 代码,给我一个错误,在 access 数据库中需要一个或多个参数,有人能帮我吗?...由于这个错误,我被绞死了!

代码如下:

string date = textBox1.Text; 
con = new OleDbConnection(cs); 
con.Open();        
String sql = "SELECT * From Sales where InvoiceDate = date "; 
cmd = new OleDbCommand(sql, con); 
cmd.ExecuteNonQuery(); 
DataTable dt = new DataTable(); 
dt.Load(cmd.ExecuteReader()); 
dataGridView1.DataSource = dt; 

第一个缺陷 :您没有提到 cs 是什么(我的意思是向我们展示连接字符串)但不是什么大问题,因为它不是抛出错误。

第二个缺陷InvoiceDate = date,这里date既不是值也不是变量。

将其用作变量

 ...InvoiceDate ='" + date + "'"

作为直接值使用

 ...InvoiceDate ='date'"

第三个缺点cmd.ExecuteNonQuery,没必要

第四个缺陷:嗯,我不应该称之为缺陷,而是一点知识共享:你可以创建一个单独的DataAdapter然后使用它填充您的 table :

 OleDbDataAdapter ada = new OleDbDataAdapter(cmd);
 ada.Fill(mydatatable);

最大的缺陷Sql-Injection,请不要让attackers.Rather使用parameters:

 "SELECT * From Sales where InvoiceDate=@date"
 cmd.Parameters.Add("@date", OleDbType.Varchar).Vale = dateStringHere ///change data-type from varchar as required

首先,我建议将该日期解析为 DateTime,因为我希望您的 InvoiceDate 是数据库中的实际日期类型。其次你需要使用一个参数来传递值。最后删除 ExecuteNonQuery。此外,您应该将一次性物品放入 using 语句中,以便正确关闭连接。

DateTime date;
if(!DateTime.TryParse(textBox1.Text, out date))
{
    //Do whatever you need to indicate a bad date.
}

using(var con = new OleDbConnection(cs))
{
    con.Open();        
    String sql = "SELECT * From Sales where InvoiceDate = @date"; 
    using(var cmd = new OleDbCommand(sql, con))
    {
        cmd.Parameters.Add("@date", /*Insert correct type here*/).Value = date;
        DataTable dt = new DataTable(); 
        dt.Load(cmd.ExecuteReader()); 
        dataGridView1.DataSource = dt; 
    }
}