【问题标题】:Object does not contain definition for Item_Id and no extension method 'Item_Id' accepting first argument of type 'object' could be found对象不包含 Item_Id 的定义,并且找不到接受“object”类型的第一个参数的扩展方法“Item_Id”
【发布时间】:2015-03-15 09:10:52
【问题描述】:

我正在创建发票窗口表单应用程序,但出现

的错误

object 不包含 Item_Id 的定义并且没有扩展名 接受“object”类型的第一个参数的方法“Item_Id”可以是 找到(您是否缺少 using 指令或程序集引用)

以下代码

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

【问题讨论】:

  • 什么是 OrderItems.Row?您正在循环这个集合,并且这个集合的每个元素都应该有一个名为 Item_Id 的属性。您能否显示存储在 OrderItems 类的 Rows 集合/列表/数组中的类的定义?

标签: c#


【解决方案1】:

如果OrderItemsDataTable,那么获取DataRow(存储在Rows 集合中的类)中的一个字段的语法是(大致)

 item["Item_Id"].ToString() 

但是在AddWithValue 中使用这个值需要将该值转换为正确的数据类型。 这意味着如果InvoiceItem 中的字段ItemID 是一个整数,那么您需要应用类似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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2023-03-13
    • 2015-11-21
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多