0

我有下面的代码,可以将 access 数据库中的数据显示到另一种形式的文本框中。

item items = new item();
Add_Order addorder = new Add_Order();
OleDbCommand cmd = new OleDbCommand("Select * from tblItems WHERE ItemName = @Item", connection);
cmd.Parameters.AddWithValue("@Item", items.ItemName1);
cmd.Connection = connection;
connection.Open();

cmd.ExecuteNonQuery();
cmd.Parameters.AddWithValue("@ItemID", addorder.tbItemID.Text);
cmd.Parameters.AddWithValue("@ItemName", addorder.tbName.Text);
cmd.Parameters.AddWithValue("@ItemPrice", addorder.tbPrice.Text);
OleDbDataReader read = cmd.ExecuteReader();
while (read.Read())
{
    addorder.tbItemID.Text = read[0].ToString();
    addorder.tbName.Text = read[1].ToString();
    addorder.tbPrice.Text = read[2].ToString();
}
addorder.ShowDialog();
connection.Close();

错误说

参数@Item 没有默认值

@Item但是我已经在这一行中分配了值

cmd.Parameters.AddWithValue("@Item", items.ItemName1);
4

3 回答 3

2

我发现了一些错误,您正在检索一些项目。然后,为什么要使用 ExecuteNonquery() 和其他一些参数。试试这个

cmd.Connection = connection;
connection.Open();
OleDbCommand cmd = new OleDbCommand("Select * from tblItems WHERE ItemName = @Item", connection);
cmd.Parameters.AddWithValue("@Item", items.ItemName1);

OleDbDataReader read = cmd.ExecuteReader();
while (read.Read())
{
addorder.tbItemID.Text = read[0].ToString();
addorder.tbName.Text = read[1].ToString();
addorder.tbPrice.Text = read[2].ToString();
}
connection.Close();

确保 items.ItemName1 具有有效条目。您可以通过简单地手动传递一些值来验证这一点

cmd.Parameters.AddWithValue("@Item", "some text");
于 2013-03-19T06:16:18.423 回答
1

试试这个:

cmd.Parameters.AddWithValue("@Item", OleDbType.VarChar).Value = items.ItemName1;

你为什么在ExecuteNonQuery()..之后再次使用它?

cmd.Parameters.AddWithValue("@ItemID", addorder.tbItemID.Text);
cmd.Parameters.AddWithValue("@ItemName", addorder.tbName.Text);
cmd.Parameters.AddWithValue("@ItemPrice", addorder.tbPrice.Text);
于 2013-03-19T06:15:20.203 回答
0
cmd.Parameters.Add(new OleDbParameter("item", OleDbType.VarChar, 32,  "Item").Value = items.ItemName1;
                   ^^^^^^^^^^^^^^^^^^

关键是构造Parameter()

于 2013-03-19T06:22:51.713 回答