对象不包含Item_Id的定义,并且没有扩展方法'Item_Id'接受类型'object'的第一个参数可以找到

时间:2015-03-15 09:10:52

标签: c#

我正在创建发票窗口表单应用,但我收到错误

  

对象不包含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_IdItem_Idquantity的列。

问题的详细信息可以参考link

1 个答案:

答案 0 :(得分:0)

如果OrderItemsDataTable,那么获取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();
    }
}