SQL插入失败,列名无效

时间:2014-11-10 14:50:08

标签: sql-server vb.net

当我尝试使用名称填充textbox1时,我收到一个异常,表明列名无效。当我用数字填充它时,它可以工作。

coach_name的数据类型为varchar(50)

插入代码为:

 // connection setup code
    SqlConnection conn = new SqlConnection(connString);
    string Coach_Name = textBox1.Text;
    try {        
    string Password1=textBox2.Text;
    string Password2=textBox3.Text;
    string Password=textBox2.Text;

    if (Password1.Equals(Password2))
    {

        SqlCommand cmd = new SqlCommand("insert into CoachLogins values (" + Coach_Name + ",'" + Password + "')", conn);

        conn.Open();
        cmd.ExecuteNonQuery(); // hyi insert update delete ma btekhod shi

    }        

2 个答案:

答案 0 :(得分:4)

您尚未在引号中包含Coach_Name,因此如果您将其传递给字符串,它将无效。数字值将在查询中起作用,因为它们不必用引号括起来:

SqlCommand cmd = new SqlCommand _
   ("insert into CoachLogins values ('" + Coach_Name + "','" + Password + "')", conn);

请阅读有关使用parameterised queries & SQL injection

的信息

另外,我知道这可能是您开发工作的早期阶段,但请使用比button1textBox1更有用的内容命名控件。如果你沿着这条道路前进,它很快就会变得一团糟。

答案 1 :(得分:0)

尝试将代码改为:

点应该是封面

  1. 使用**using**实现IDisposable
  2. 包裹您的连接和命令
  3. 不要使用普通密码。而不是使用算法来加密它
  4. 始终使用SQLParameters SQL 避免SQL注入
  5. using (SqlConnection con=new SqlConnection(MyConnectionString))
    {
    conn.Open();
    using(SqlCommand command= new SqlCommand("insert into 
    CoachLogins (Coach_Name,Password )
       values (@Coach_Name , @Password )", conn))
    {
    command.CommandType = CommandType.Text;
    command.Parameters.Add("@Coach_Name", SqlDbType.NVarChar,100).Value = TextBox1.Text;
    command.Parameters.Add("@Password", SqlDbType.NVarChar,100).Value = TextBox2.Text;
    .....
    
     cmd.ExecuteNonQuery();
    
    con.dispose
    
    
    }
    
    }