не содержит определения для GetInt32 и метода расширения, принимающего первый аргумент

Я создаю приложение формы окна счета-фактуры, но сталкиваюсь с проблемой, когда помещаю GetInt32 в код, как показано ниже:

 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.GetInt("InvoiceID");
                    //invoiceID =(int)cmd.Parameters["@InvoiceID"].Value;
                }
            }
            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_Id);
                    cmd.Parameters.AddWithValue("@quantity", quantity);
                    cmd.ExecuteNonQuery();
                }
            }
        }
    }

Я пробовал invoiceID = cmd.SqlDataReader.GetInt32("InvoiceID"); и invoiceID = cmd.SqlDataReader.GetInt32("InvoiceID");, но не работает.


person user4562396    schedule 15.03.2015    source источник
comment
Посмотрите на подпись, она принимает int ordinal, а не string columnName.   -  person Caramiriel    schedule 15.03.2015


Ответы (1)


GetInt32 ожидает порядковый номер вашего столбца. Чтобы вместо этого указать имя столбца, вы можете использовать индексатор строк на SqlDataReader, который принимает имя столбца:

invoiceID = (int)reader["InvoiceID"];

Это предполагает, что ваш столбец InvoiceID не допускает значения NULL. Если это так, вы должны вместо этого использовать GetOrdinal и IsDBNull.

person Douglas    schedule 15.03.2015
comment
но это влияет на cmd.Parameters.AddWithValue (@ItemID, item.Item_Id); cmd.Parameters.AddWithValue (@quantity, item.quantity); Есть ли у вас какие-либо идеи? Что в этом плохого? Я новичок в C # - person user4562396; 15.03.2015
comment
да, я получаю сообщение об ошибке, в котором говорится, что объект не содержит определения для Item_Id и не может быть найден метод расширения Item_Id, принимающий первый аргумент типа «объект» (отсутствует ли у вас директива using или ссылка на сборку), - person user4562396; 15.03.2015