исключение argumentnullexception было необработанной вставкой в

#c# #datagridview #sql-server-ce

#c# #datagridview #sql-server-ce

Вопрос:

Я пытаюсь вставить данные в базу данных через datagridview. Мой код до сих пор проверяет, существует ли таблица, если нет, он создает новую таблицу, а затем копирует в нее данные. Я могу скопировать данные в таблицу, и все работает хорошо. Пока я не получу ошибку, argumentnullexception не был обработан. Данные вставляются в таблицу, и я могу просмотреть таблицу и увидеть, что данные там есть. Это описание ошибки:

Параметризованный запрос ‘вставить в [alalala_Thomas_Humphries_Quote]([Название товара], [Описание товара], [Розничная цена], [Номер поставщика], [Требуемое количество], [На складе], [Себестоимость], [Общая стоимость], [Общая розничная]) значения (@item, @desc,@retail,@supplier,@quantity,@stock,@cost,@totalcost, @totalretail)’ ожидает значение параметра, которое не было указано. Имя параметра: @item

и это мой код:

 private void insertData()
        {
            string tableName = quotenameTxt.Text   "_"   firstTxt.Text   "_"   surenameTxt.Text   "_Quote";

            SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|LWADataBase.sdf");
            con.Open();
            SqlCeDataAdapter da = new SqlCeDataAdapter();

            for (int i = 0; i < dataGridView1.Rows.Count - 0; i  )
            {
                string query = "insert into ["   tableName   "]([Item Name], [Item Description], [Retail Price], [Supplier Number], [Quantity Required], [In stock], [Cost Price], [Total Cost],[Total Retail]) values (@item, @desc,@retail,@supplier,@quantity,@stock,@cost,@totalcost, @totalretail)";
                SqlCeCommand cmd = new SqlCeCommand(query, con);
                cmd.Parameters.Add(new SqlCeParameter("@item", dataGridView1.Rows[i].Cells[0].Value));
                cmd.Parameters.Add(new SqlCeParameter("@desc", dataGridView1.Rows[i].Cells[1].Value));
                cmd.Parameters.Add(new SqlCeParameter("@retail", dataGridView1.Rows[i].Cells[2].Value));
                cmd.Parameters.Add(new SqlCeParameter("@supplier", dataGridView1.Rows[i].Cells[3].Value));
                cmd.Parameters.Add(new SqlCeParameter("@quantity", dataGridView1.Rows[i].Cells[4].Value));
                cmd.Parameters.Add(new SqlCeParameter("@stock", dataGridView1.Rows[i].Cells[5].Value));
                cmd.Parameters.Add(new SqlCeParameter("@cost", dataGridView1.Rows[i].Cells[6].Value));
                cmd.Parameters.Add(new SqlCeParameter("@totalcost", dataGridView1.Rows[i].Cells[7].Value));
               cmd.Parameters.Add(new SqlCeParameter("@totalretail", dataGridView1.Rows[i].Cells[8].Value));
                da.InsertCommand = cmd;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Quotation :"   tableName   " saved.", "Saved");
            }


        }  
 

Я использую C # 2010 и SQLCe 3.5.

Комментарии:

1. Можете ли вы вставить свой код создания таблицы?

Ответ №1:

Поскольку данные были вставлены в таблицу, возможно, возникла проблема с приведением объекта после передачи данных в базу данных. Попробуйте преобразовать ваши значения dataGridView1 в правильный тип, прежде чем передавать их в качестве параметров, подобных этому:

 cmd.Parameters.Add(new SqlCeParameter("@item", Convert.ToString(dataGridView1.Rows[i].Cells[0].Value)));
 

Я надеюсь, что это поможет.