C# InvalidOperationException: Исключение ExecuteNonQuery

У меня возникает эта ошибка, когда я пытаюсь сохранить некоторые данные в свой sql (экспресс) через программное обеспечение, которое я создал.

Произошло необработанное исключение типа «System.InvalidOperationException» в System.Data.dll. Дополнительная информация: ExecuteNonQuery: свойство Connection не инициализировано.

Вот мой код:

    private void save_medicine_Click(object sender, EventArgs e)
    {
        cn.Open();

        if (nameBox.Text != "" & companyBox.Text != "" & categoryBox.Text != "" & 
           amountBox.Text != "" & restockBox.Text != "" & buyBox.Text != "" & 
           sellBox.Text != "" & qualityComboBox.Text !=""  )
        {
            cmd.CommandText = "insert into drug_info (name,company_id,category,
                               expiration_date,stock_level,
                               critical_level_drug,cost_buy,cost_sell,drug_quality) 
                               values ('"+nameBox.Text+"','"+companyBox.Text+"','"+
                               categoryBox.Text+"','"+dateTimePicker1+"','"+amountBox+"','"
                                +restockBox+"','"+buyBox+"','"+sellBox+"','"
                                +qualityComboBox+"')";
            cmd.ExecuteNonQuery();
            cmd.Clone();

        }
    }
}

person dbexec    schedule 27.05.2012    source источник
comment
Зачем вы выложили скриншот кода? Это вообще не читается. Вместо этого отправьте код.   -  person Adam    schedule 27.05.2012


Ответы (3)


У вас есть переменная класса cn и локальная переменная cn в rMedecine_reg_load. Это не кажется правильным.

Ошибка просто означает, что вы пытаетесь использовать cmd перед назначением ему соединения.

person C.Evenhuis    schedule 27.05.2012
comment
Хорошо, я нашел то, что должен был сделать .. теперь у меня другая ошибка Необработанное исключение типа «System.Data.SqlClient.SqlException» произошло в System.Data.dll Дополнительная информация: Преобразование не удалось при преобразовании даты и/или времени из символа нить. - person dbexec; 27.05.2012
comment
Действительно, вам, вероятно, следует инициализировать cmd, используя либо cmd = cn.CreateCommand(), либо cmd = new SqlCommand(cn) (я думаю, синтаксис такой) - person Peter Davidsen; 27.05.2012

Прежде всего: используйте параметры. Вы можете прочитать о них здесь.

Другое дело вот эта строчка:

cmd.Clone();

Бьюсь об заклад, вы хотели закрыть команду. Но закрыть SqlCommand невозможно. Просто удалите строку.

Вы также должны навести порядок с двумя соединениями, как указано в другом ответе.

person Adam    schedule 27.05.2012

попробуй так

     if (nameBox.Text != "" & companyBox.Text != "" & categoryBox.Text != "" &  amountBox.Text != "" & restockBox.Text != "" & buyBox.Text != "" & sellBox.Text != "" & qualityComboBox.Text !=""  )
    {

        string sql = "insert into drug_info (name,company_id,category,expiration_date,stock_level,critical_level_drug,cost_buy,cost_sell,drug_quality) values ('"+nameBox.Text+"','"+companyBox.Text+"','"+categoryBox.Text+"','"+dateTimePicker1+"','"+amountBox+"','"+restockBox+"','"+buyBox+"','"+sellBox+"','"+qualityComboBox+"')";
        SqlCommand cmd = new SqlCommand(sql,cn);
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();
        MessageBox.Show("Τα στοιχεία καταχωρήθηκαν στη Βάση");
    }

это, вероятно, должно работать ... хотя я не знаю, почему такие значения, как «amountBox» и «buyBox», не имеют прикрепленного к ним .Text. Я не знаю, откуда берутся эти значения, но вам может понадобиться добавить .Text, если это текстовые поля. если они есть, и вы пытаетесь вставить их в свою базу данных таким образом, вы получите ошибку, потому что вы не можете вставить в базу данных что-то, что имеет тип «Текстовое поле».

person Thousand    schedule 27.05.2012
comment
они находятся в моей базе данных, если я добавлю .text, это будет тормозить. поэтому я пытаюсь найти то, что я должен добавить в конце. - person dbexec; 27.05.2012
comment
попробуйте Convert.ToInt32(amountBox.Text), который должен разобрать их на целые числа. dateTimepicker, это jquery timepicker? потому что вам придется разобрать это, а затем - person Thousand; 27.05.2012
comment
хорошо, я сделал так, как вы мне сказали, я добавил ко всем int@myDB convert.ToInt32 и мой decimal@myDB convert.ToDouble НО теперь я получил эту ошибку.. Дополнительная информация: арифметическое переполнение ошибка преобразования varchar в числовой тип данных. НО все мои текстовые поля nvarchar похожи на это textbox.text... - person dbexec; 27.05.2012