private void button1_Click(object sender, EventArgs e)
        {            
                string a = textBox1.Text.Trim();
                string b = textBox2.Text.Trim();
               
                if (Validate())
                {                    string sql = string.Format("insert into 员工 values('{0}','{1}','{2}')", a, b);
                    if (UpdateDataTable(sql))
                    {
                        MessageBox.Show("员工信息登记成功", "提示", MessageBoxButtons.OK);
                    }
                    else
                    {
                        MessageBox.Show("员工信息登记失败", "提示", MessageBoxButtons.OK);
                    }                }
            
            
        }       
        public static  bool UpdateDataTable(string sql)
        {
            string ConnectString = ConfigurationManager.ConnectionStrings["dataconstr"].ConnectionString;
            using (SqlConnection con = new SqlConnection(ConnectString))
            {
                try
                {
                    con.Open();
                   
                    
                    SqlCommand comm = new SqlCommand(sql, con
                    if (comm.ExecuteNonQuery() > 0)                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (SqlException ex)
                {
                    
                    
                    throw new Exception(ex.Message);
                }
            }        }请问这段代码那个地方错了,当我没有输入数据时,那些空格也可以插入到数据库中,但是我在数据库中的数据都是不能空的,不知道为什么插入到数据库时是空的?请高手帮我解释一下!希望高手能帮助找出代码中的错误

解决方案 »

  1.   

    string.Format("insert into 员工 values('{0}','{1}','{2}')", a, b);
    少指定参数了吧?
      

  2.   

    string sql = string.Format("insert into 员工 values('{0}','{1}','{2}')", a, b);  少个参数SqlCommand comm = new SqlCommand(sql, con  少个括号
      

  3.   

    +1
    还有你判断null时,最好用String.IsNullOrEmpty("");
      

  4.   

    private void button1_Click(object sender, EventArgs e)
      {    
      string a = textBox1.Text.Trim();
      string b = textBox2.Text.Trim();
        
      if (Validate())
      {  string sql = string.Format("insert into 员工 values('{0}','{1}'", a, b);
      if (UpdateDataTable(sql))
      {
      MessageBox.Show("员工信息登记成功", "提示", MessageBoxButtons.OK);
      }
      else
      {
      MessageBox.Show("员工信息登记失败", "提示", MessageBoxButtons.OK);
      }  }
        
        
      }   
      public static bool UpdateDataTable(string sql)
      {
      string ConnectString = ConfigurationManager.ConnectionStrings["dataconstr"].ConnectionString;
      using (SqlConnection con = new SqlConnection(ConnectString))
      {
      try
      {
      con.Open();
        
        
      SqlCommand comm = new SqlCommand(sql, con
      if (comm.ExecuteNonQuery() > 0)  {
      return true;
      }
      else
      {
      return false;
      }
      }
      catch (SqlException ex)
      {
        
        
      throw new Exception(ex.Message);
      }
      }  }
    ,刚才写错代码了请问这段代码那个地方错了,当我没有输入数据时,那些空格也可以插入到数据库中,但是我在数据库中的数据都是不能空的,不知道为什么插入到数据库时是空的?请高手帮我解释一下!希望高手能帮助找出代码中的错误
      

  5.   

    object a = textBox1.Text.Trim()==string.Empty?DBNull.Value:textBox1.Text.Trim();
    object b = textBox2.Text.Trim()==string.Empty?DBNull.Value:textBox2.Text.Trim();注意DBNull.Value才是真正的数据库的空,其他的只不过是空白字符
      

  6.   

    你应该在插入数据库之前,写一个检查用户输入的方法public bool checkInfo()
    {
       bool condition = false;
       
       if(string.IsNullOrEmpty(this.textBox1.Text))
      {
          condition = false;
      }
       else if(string.IsNullOrEmpty(this.textBox2.Text))
      {
          condition = false;
      }
      else
      {
          condition = true;
      }    return condition;
    }
    然后把这个方法放在UpdateDataTable(string sql)方法之前if(checkInfo())
    {
       if(UpdateDataTable(sql))
       {
           //判断
       }
    }
      

  7.   

      string a = textBox1.Text.Trim();
      string b = textBox2.Text.Trim();这里a,b就是
    object a = textBox1.Text.Trim()==string.Empty?DBNull.Value:textBox1.Text.Trim();
    object b = textBox2.Text.Trim()==string.Empty?DBNull.Value:textBox2.Text.Trim();你插入的可能是空白字符
      

  8.   


    我试过了,还是不可以,DBNull.Value : textBox1.Text.Trim()这里出错
      

  9.   

    string a = textBox1.Text.Trim();
    string b = textBox2.Text.Trim();if(a.Length==0 || b.Length==0)
    MessageBox.Show("值不能为空", "提示", MessageBoxButtons.OK);在保存数据到数据库中的时候,如果你的a是"",其实插入的数据是一串空白字符,你应该可以看到数据库中保存的是一长串的空格,而不是NULL。而数据库中对应的NULL,在C#中对应的是DBNull.Value。
    也就是说,如果你保存的是DBNull.Value,那么才会触发数据库中的数据不能为空的验证。
      

  10.   

    你可以试试
    object p1,p2;
    string a = textBox1.Text.Trim();
    string b = textBox2.Text.Trim();
    if(a==string.Empty) p1=DBNull.Value; else p1=a;
    if(b==string.Empty) p2=DBNull.Value; else p2=b;string sql = string.Format("insert into 员工 values('{0}','{1}')", p1, p2);看看还会不会插入了
    由于你用的是string.Format的拼字符串的方式,我不保证DBNull.Value在拼的时候会不会被转义了。但如果你用参数化的方式写sql语句的话,DBNull.Value肯定是会提示不能为空的。
      

  11.   

    //先作非空判断
    if(a!="" && b!="")
    {
       if (Validate())
       {
           //这里不变
       }
    }
    else
    {
       MessageBox.Show("输入不能为空!", "提示", MessageBoxButtons.OK);}
    再试试看!
    或者自己在调试的时候多试几个方法就出来了(不用盯着数据库看,太低率了!)