没有给出一个或多个必需参数的值

时间:2016-05-22 20:25:40

标签: c# asp.net ado.net

我收到错误"没有给出一个或多个必需参数的值"请帮忙。对于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语句的一些问题。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

我尝试测试你的代码并得到了同样的错误,但后来修复了我的数据库以匹配你的查询,它工作正常。

从表中删除要测试的列后,错误再次出现。所以我认为在这种情况下它只是一个误导性的错误消息,实际上您的数据库缺少您在查询中引用的列(而不是参数的问题)。

e.g。从用户中删除QueueName列并使用您声明的消息打破cmd2

查看您的数据库并确保列符合您的查询。即,您的UserName表格应包含UIDUserNameQueueName列,而您的Issues表格应包含Issues列。

更新:添加用于成功运行代码的数据图像。请查看是否有任何内容与您的数据不符。特别检查数据类型。

用户架构:

Users schema

用户数据:

Users data

问题架构:

Issues schema

发布数据:

Issues data

答案 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的顺序必须直接对应于命令文本中参数的问号占位符的位置。

来源:https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1