我正在创建发票窗口表单应用,但我收到错误
对象不包含Item_Id的定义,也没有扩展名 方法' Item_Id'接受类型'对象'的第一个参数。可能 找到了(你错过了使用指令或汇编引用)
以下代码
private void StoreData()
{
int invoiceID;
// int Item_Id;
// int quantity;
using (var con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\oo\Documents\Data.mdf;Integrated Security=True;Connect Timeout=30"))
{
con.Open();
using (var cmd = con.CreateCommand())
{
cmd.CommandText = @"insert into Invoice(subtotal,tax,total) values (@subtotal,@tax,@total); select SCOPE_IDENTITY() as InvoiceID;";
cmd.Parameters.AddWithValue("@subtotal", subtotal);
cmd.Parameters.AddWithValue("@tax", totalTaxes);
cmd.Parameters.AddWithValue("@total", total);
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
//invoiceID = cmd.GetInt32("InvoiceID");
invoiceID = (int)reader["InvoiceID"];
}
}
foreach (var item in OrderItems.Rows)
{
using (var cmd = con.CreateCommand())
{
cmd.CommandText = @"insert into InvoiceItem(InvoiceID,ItemID,quantity) values (@InvoiceID,@ItemID,@quantity);";
cmd.Parameters.AddWithValue("@InvoiceID", invoiceID);
cmd.Parameters.AddWithValue("@ItemID", item.Item_Id);
cmd.Parameters.AddWithValue("@quantity", item.quantity);
cmd.ExecuteNonQuery();
}
}
}
}
OrderItems
是一个表名,其中包含inv_Id
,Item_Id
和quantity
的列。
问题的详细信息可以参考link
答案 0 :(得分:0)
如果OrderItems
是DataTable
,那么获取DataRow
(存储在Rows集合中的类)中的一个字段的语法是(粗略地)
item["Item_Id"].ToString()
但是将此值与AddWithValue
一起使用需要将值转换为正确的数据类型。
这意味着,如果ItemID
中的字段InvoiceItem
是整数,那么您需要应用Convert.ToInt32(item["Item_Id"])
之类的转化(同样适用于quantity
foreach (var item in OrderItems.Rows)
{
using (var cmd = con.CreateCommand())
{
cmd.CommandText = @"insert into InvoiceItem(InvoiceID,ItemID,quantity)
values (@InvoiceID,@ItemID,@quantity);";
cmd.Parameters.AddWithValue("@InvoiceID", invoiceID);
cmd.Parameters.AddWithValue("@ItemID", Convert.ToInt32(item["Item_Id"));
cmd.Parameters.AddWithValue("@quantity", Convert.ToInt32(item["quantity"));
cmd.ExecuteNonQuery();
}
}