错误一个或多个参数是必需的
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;
}
}
这是 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;
}
}