为什么我得到"必须声明标量变量" @ rollnum""我尝试插入时出错?

时间:2015-03-04 09:41:21

标签: c# mysql ado.net

我的代码是--------

                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 个答案:

答案 0 :(得分:0)

您应该在创建命令之后和执行命令之前绑定参数。 例如: cmd.Parameters.AddWithValue("@rollnum", rollnum); (对所有其他参数也一样)

答案 1 :(得分:0)

由于你没有得到完整答案,这是我的..

正如我在评论中所说,您在SqlCommand中声明了参数名称,但您从未将它们添加为参数名称及其标量值。这就是您的错误消息所说的原因;

  

必须声明标量变量" @rollnum“

因为它是您在命令中定义的第一个参数。当你尝试执行它时,正常以期望标量变量而不是参数名称。

还可以使用using statement自动处理您的SqlConnectionSqlCommand,而不是手动调用.Close().Dispose()方法。

在将来的SQL Server版本中,STATE可以是reserved word。您可能需要将其用作[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...");
}