Member 13037527 Ответов: 1

Я получаю ошибку при вставке записей в таблицу sqldata с помощью C# windows form. Вот мой код. Я не могу найти ошибку


я попытался сообразить. если я изменил sqldatareader в режим комментариев, он будет работать. пожалуйста, помогите мне в этом.
Давая ошибку, как
Must declare the scalar variable "@label2".


Что я уже пробовал:

con = new SqlConnection(@"Data Source=M2\SQL2016;Initial Catalog=inventoryDB;Integrated Security=True");// Database connetion path
                con.Open();
                cmd = new SqlCommand("INSERT INTO companyDB(compname) VALUES (@label2)", con);// inserting into database
                SqlDataReader dr = cmd.ExecuteReader();
                dr.Close();

                cmd.Parameters.Add("@label2", cmpname.Text);
                MultipleActiveResultSets = true;
               //duplicatecheck();
                cmd.ExecuteNonQuery();
                MessageBox.Show("Saved Successfully");
                cmpname.Text = "";
                cmpname.Focus();
                con.Close();

1 Ответов

Рейтинг:
1

Richard MacCutchan

Конечно, это сработает. Посмотрите на код, вы звоните ExecuteReader на инструкции INSERT. Также вы не объявили значение параметра.

И пожалуйста, никогда сделать следующее

MessageBox.Show("Saved Successfully");

когда вы еще не проверили, что команда выполнена успешно. Вы можете работать неделями, месяцами или даже годами, не зная, что ваша база данных-мусор. Системные команды возвращают информацию о состоянии по уважительной причине, используйте ее.


Member 13037527

@Ричард SQL для объекта DataReader я использовал, чтобы проверить на наличие дубликатов.так что мешают вводить дубликаты.

Richard MacCutchan

Вы ничего не проверяете, и ваш оператор SQL по-прежнему неверен.

Member 13037527

@richard for duplicate check я написал это, но ошибка идет "

There is already an open DataReader associated with this Command which must be closed first.

Так что я закрыл там но все равно ошибка идет так что я преобразовал эти две строки в комментарии
public bool duplicatecheck()
            {
            
            string constring = @"Data Source=M2\SQL2016;Initial Catalog=inventoryDB;Integrated Security=True"; 
            SqlConnection con = new SqlConnection(constring);// data connection
            SqlCommand cmd = new SqlCommand("Select count(*) from companyDB where compname= @alias", con);
            cmd.Parameters.AddWithValue("@alias", this.cmpname.Text);
            con.Open();
            
            
            SqlDataReader dr = cmd.ExecuteReader();
            
            
            

            int TotalRows = 0;
            TotalRows = Convert.ToInt32(cmd.ExecuteScalar());
            //dr.Close();
            if (TotalRows > 0)
            {
                MessageBox.Show("Alias " + dr[1].ToString() + " Already exist");
                
                return true;
                

            }
            else
            {
                return false;
            }

Richard MacCutchan

Вы звоните ExecuteReader сразу же за этим последовали ExecuteScalar Вам нужно остановиться и внимательно посмотреть на рабочий процесс вашего кода, а не случайным образом добавлять или изменять команды.