Why I get “Must declare the scalar variable ”@rollnum“” error when I try to insert?

Refresh

December 2018

Views

561 time

2

my code given is--------

                SqlConnection cn = new SqlConnection(@"Data Source=CHROMA\SQLEXPRESS;Initial Catalog=marksheet;Integrated Security=True"); 
                cn.Open();

                if (cn != null)
                {

                    Console.WriteLine("Enter roll number");
                   string rollnum =Console.ReadLine();

                    Console.WriteLine("Enter name");
                    string name = Console.ReadLine();

                    Console.WriteLine("Enter gender");
                    string gen = Console.ReadLine();

                    Console.WriteLine("Enter DOB");
                    string DOB = Console.ReadLine();

                    Console.WriteLine("Enter father name");
                    string father = Console.ReadLine();

                    Console.WriteLine("Enter course");
                    string course = Console.ReadLine();

                    Console.WriteLine("Enter address");
                    string add = Console.ReadLine();

                    Console.WriteLine("Enter city");
                    string city = Console.ReadLine();

                    Console.WriteLine("Enter state");
                    string state = Console.ReadLine();

                    Console.WriteLine("Enter phone");
                    string phone = Console.ReadLine();
        SqlCommand cmd = new SqlCommand("insert into student (rollno,name,gender,dob,fname,course,address,city,state,phone) values(@rollnum,@name,@gen,@DOB,@father,@course,@add,@city,@state,@phone,)",cn);

                   int row= cmd.ExecuteNonQuery();
                    if(row >0)

                    Console.WriteLine("Record inserted...");
                    cn.Close();
                    cn.Dispose();
                }
                else
                    Console.WriteLine("please open connection first!!");

2 answers

0

Так как вы не получили полный ответ, вот мой ..

Как я уже сказал в своем комментарии, вы объявляли свои имена параметров в вашем , SqlCommandно вы никогда не добавить их в качестве имени параметра и их значений скалярных. Вот почему ваше сообщение об ошибке говорит;

Необходимо объявить скалярную переменную «@rollnum»

так как это первый параметр , который определяется в вашей команде. И когда вы пытаетесь выполнить его, это тоже нормально ожидать скалярную переменную вместо имени параметра.

Кроме того, используйте usingзаявление распоряжаться вашей SqlConnectionи SqlCommandавтоматически вместо вызова .Close()или .Dispose()методы вручную.

И STATEможет быть зарезервированным словом в будущих версиях SQL Server. Вы , возможно , потребуется использовать его в качестве [STATE].

Я предполагаю , что ваши столбцы nvarcharтипа, вот мой пример;

using(var cn = new SqlConnection(conString))
using(var cmd = cn.CreateCommand())
{
   cmd.CommandText = @"insert into student (rollno,name,gender,dob,fname,course,address,city,[state],phone) 
                       values(@rollnum,@name,@gen,@DOB,@father,@course,@add,@city,@state,@phone)";
   cmd.Parameters.Add("@rollnum", SqlDbType.NVarChar).Value = rollnum;
   cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = name;
   cmd.Parameters.Add("@gen", SqlDbType.NVarChar).Value = gen;
   cmd.Parameters.Add("@DOB", SqlDbType.NVarChar).Value = DOB;
   cmd.Parameters.Add("@father", SqlDbType.NVarChar).Value = father;
   cmd.Parameters.Add("@course", SqlDbType.NVarChar).Value = course;
   cmd.Parameters.Add("@add", SqlDbType.NVarChar).Value = add;
   cmd.Parameters.Add("@city", SqlDbType.NVarChar).Value = city;
   cmd.Parameters.Add("@state", SqlDbType.NVarChar).Value = state;
   cmd.Parameters.Add("@phone", SqlDbType.NVarChar).Value = phone;

   cn.Open();
   if(cmd.ExecuteNonQuery() > 0)
      Console.WriteLine("Record inserted...");
}
0

вы должны связать свои параметры после создания команды и перед выполнением команды. например: cmd.Parameters.AddWithValue("@rollnum", rollnum); (сделать то же самое для всех остальных параметров)