2012-06-26 118 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

其更好地檢查用戶輸入的用戶界面。如果用戶必須輸入一些值,則應在嘗試將其插入數據庫之前進行檢查。

相關問題