2013-08-17 251 views
3

我有這個存儲過程:轉換數據類型爲nvarchar成int

CREATE PROCEDURE SearchEmployee 
     @EmployeeID int, 
     @EmployeeName nvarchar(256), 
     @Address nvarchar(256), 
AS 
    Select 
     EmployeeId, EmployeeName, Address 
    From 
     Employee 
    Where 
     EmployeeID = @EmployeeID OR 
     EmployeeName LIKE '%' + @EmployeeName+ '%' OR 
     Address LIKE '%' + @Address+ '%' 

然後在我的WinForms我這樣稱呼它:

using (SqlCommand mySqlCommand1 = new SqlCommand("dbo.SearchEmployee", myDatabaseConnection)) 
{ 
      mySqlCommand1.CommandType = CommandType.StoredProcedure; 
      { 
       mySqlCommand1.Parameters.AddWithValue("@EmployeeID", textBox1.Text); 
       mySqlCommand1.Parameters.AddWithValue("@EmployeeName", textBox1.Text); 
       mySqlCommand1.Parameters.AddWithValue("@Address", textBox1.Text); 
      } 
     } 

我將如何避免錯誤

將數據類型nvarchar轉換爲int時出錯。

當用戶輸入員工姓名而不是EmployeeID

EmployeeID = cast(@EmployeeID as varchar(10)) 

回答

1

沒有與你的設計有問題。你如何使用NameId的相同字段? Name可以包含任何字符,因爲Id不能!如果用戶鍵入非數字,則最快的解決方法是傳遞無效值Id

int empId = 0; 
if(!int.TryParse(textbox1.Text, out empId)) 
{ 
    empId = -1;// or some invalid Id which won't appear in DB 
} 
mySqlCommand1.Parameters.AddWithValue("@EmployeeID", empId); 

這應該解決您的問題

+0

因爲我只用一個searchTextBox會發現每個字段。非常感謝 :) –

0

我會建議,而不是此實現:

我在存儲過程中嘗試這個

  • 創建兩個不同的存儲過程 - 一個用於數字ID,另一個用於字母查詢;
  • 在您的Winforms應用程序中檢測用戶輸入的內容是否爲數字 - 您可以檢查TryParse以執行此操作;
  • 根據輸入類型使用一種或另一種。

希望它適合你。

0

變化

mySqlCommand1.Parameters.AddWithValue("@EmployeeID", textBox1.Text); 

mySqlCommand1.Parameters.AddWithValue("@EmployeeID",Convert.ToInt32(textBox1.Text)); 
+0

.....同樣的錯誤 –

相關問題