我收到错误"没有给出一个或多个必需参数的值"请帮忙。对于Nid.Text值是" N712"。
private void Form1_Load(object sender, EventArgs e)
{
OleDbConnection cont1 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\vsual\Database3.accdb");
OleDbCommand cmd1 = new OleDbCommand("select distinct UserName from Users where UID=@UID ", cont1);
OleDbCommand cmd2 = new OleDbCommand("select distinct QueueName from Users where UID=@UID ", cont1);
OleDbCommand cmd3 = new OleDbCommand("select * from Issues", cont1);
cmd1.Parameters.AddWithValue("@UID", Nid.Text);
cmd2.Parameters.AddWithValue("@UID", Nid.Text);
cont1.Open();
OleDbDataReader rdr1= cmd1.ExecuteReader();
while(rdr1.Read())
{
txtName.Text = rdr1[0].ToString();
}
OleDbDataReader rdr2 = cmd2.ExecuteReader();
while (rdr2.Read())
{
txtQueue.Text= rdr2[0].ToString();
}
txtName.Enabled = false;
txtQueue.Enabled = false;
OleDbDataAdapter da = new OleDbDataAdapter();
DataSet ds = new DataSet();
da.SelectCommand = cmd3;
da.Fill(ds);
cmbIssue.DataSource = ds.Tables[0];
cmbIssue.ValueMember = "Issues";
cmbIssue.DisplayMember = "Issues";
cmbIssue.Enabled = true;
}
我从互联网上得到的是sql语句的一些问题。请帮我解决这个问题。
答案 0 :(得分:0)
我尝试测试你的代码并得到了同样的错误,但后来修复了我的数据库以匹配你的查询,它工作正常。
从表中删除要测试的列后,错误再次出现。所以我认为在这种情况下它只是一个误导性的错误消息,实际上您的数据库缺少您在查询中引用的列(而不是参数的问题)。
e.g。从用户中删除QueueName列并使用您声明的消息打破cmd2
。
查看您的数据库并确保列符合您的查询。即,您的UserName
表格应包含UID
,UserName
,QueueName
列,而您的Issues
表格应包含Issues
列。
更新:添加用于成功运行代码的数据图像。请查看是否有任何内容与您的数据不符。特别检查数据类型。
用户架构:
用户数据:
问题架构:
发布数据:
答案 1 :(得分:0)
这可能有所帮助,但不确定。
当CommandType设置为Text时,OLE DB .NET提供程序不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。例如:
dobj = {'reflectivity':pd.Series(np.array(gate_reflectivity)),#,index =list(range(len(gate_reflectivity)))),
'RainRate':pd.Series(np.array(gate_RainRate)), #,index =list(range(len(mmlits)))),
'Rainmm':pd.Series(np.array(Rainmm)) #,index =list(range(len(RainRate))))
}
d = pd.DataFrame(dobj,columns =['reflectivity','RainRate','Rainmm'])
new_file = filenamex[:-2]+'txt'
open(new_file,'w')
np.savetxt(new_file,d,fmt='%10.5f',delimiter = ",",header =['reflectivity','RainRate','Rainmm'])
因此,OleDbParameter对象添加到OleDbParameterCollection的顺序必须直接对应于命令文本中参数的问号占位符的位置。