2012-06-26 69 views
1

使用我的应用程序,我想确保用户是否在文本框中没有输入任何值,并单击保存按钮以在sqlserver数据库中发送数据。数据库端验证可以防止这种违规行为,并设置我的应用程序将捕获的ErrorMessage,并向用户显示有意义的消息
。对于每个必填字段,我将其设置为NOT NULL。但是当我测试时,我仍然可以输入
输入空值文本框值,它插入的值为out值。 我在想什么?如何强制用户在数据库字段中输入值

string connectionstring = "Data Source=abcdef;Initial Catalog=HMS;Persist Security Info=True;User ID=sysad;Password=abcdef"; 
     SqlConnection connection = new SqlConnection(connectionstring); 

     string SelectStatement = "SELECT * FROM tablename where RegistrationNo = @RegistrationNo"; 
     SqlCommand insertcommand = new SqlCommand(SelectStatement, connection); 
     insertcommand.Parameters.AddWithValue("@RegistrationNo", textBox10.Text); 
     SqlDataReader reader; 
     try 
     { 
      connection.Open(); 
      reader = insertcommand.ExecuteReader(); 

      while (reader.Read()) 
      { 
       textBox11.Text = reader["RegistrationNo"].ToString(); 
       textBox1.Text = reader["Appearance"].ToString(); 
       textBox2.Text = reader["VolumePH"].ToString(); 
       textBox3.Text = reader["Mobility"].ToString(); 
       textBox4.Text = reader["Viability"].ToString(); 
       textBox5.Text = reader["Head"].ToString(); 
       textBox6.Text = reader["MiddlePiece"].ToString(); 
       textBox7.Text = reader["Tail"].ToString(); 
       textBox8.Text = reader["SpermCount"].ToString(); 
       dateTimePicker1.Text = reader["Date"].ToString(); 
       textBox9.Text = reader["Comment"].ToString(); 



      }//end while 
      reader.Close(); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 

     }//end catch 
+1

我想,一个空字符串被插入到数据库中,不违反NOT NULL约束。 –

+2

TextBox不具有NULL值,它们具有空值。空值不等于NULL,所以在数据库上不会引发违规。 –

+0

在Win App中,您可以通过验证检查空的文本框。 [这里](http://stackoverflow.com/a/5605687/1004522)是链接。 –

回答

7

我失去了什么?

我想你错过了null和空字符串之间的区别。数据库区分nullempty。如果你的ToString成功,那么你有一个非空字符串,所以DB很乐意接受它作为一个有效的值。

通常,使用DB进行用户端验证有点浪费:如果您知道该字段不能为空,则应该在UI中检查它;数据库验证应作为保留数据模型完整性的最后手段。

+0

“数据库区分空和空。”并非所有的数据库都是相同的。例如。 MS SQL DB做,Oracle SQL DB不。 ecomma正在使用MS SQL,所以你的陈述在他的情况下是正确的,而不是全部。 –

+0

@TimS。那么,甲骨文正处于他们自己的联盟​​中:他们几年前做出了一个决定,并决定坚持面对标准,否则(这就是'VARCHAR2'中的'2')。这是一个[链接](https://forums.oracle.com/forums/thread.jspa?threadID=456874&start=0&tstart=0),详细讨论了这个主题(字面意思是:它长5页)。 – dasblinkenlight

1

您可以在服务器端代码中使用requiredfield验证器并验证。如果它是空字符串返回错误本身。

去sql服务器和抛出错误是不好的。

if(txtBox.Text.Trim() == string.Empty) 
    //throw "cannot be null error to user; 
0

可能是一个好主意,就是在按下按钮时检查字段。例如:

private void button_Click(object sender, EventArg e){ 
    if (textbox1.Text == ""){ 
     MessageBox.Show("Your message to the user"); 
    } 
} 

希望它可以帮助

0

其更好地检查用户输入的用户界面。如果用户必须输入一些值,则应在尝试将其插入数据库之前进行检查。

相关问题