将数据类型nvarchar转换为int

时间:2013-08-17 16:29:26

标签: c# sql-server stored-procedures sql-server-2008-r2

我有这个存储过程:

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))

3 个答案:

答案 0 :(得分: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);

这应该可以解决你的问题

答案 1 :(得分:0)

我会建议这个实现:

  • 创建两个不同的存储过程 - 一个用于数字ID,另一个用于字母数字查询;
  • 在您的Winforms应用程序中检测用户输入的内容是否为数字 - 您可以选中TryParse来实现此功能;
  • 根据输入类型使用其中一个。

希望它适合你。

答案 2 :(得分:0)

变化

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

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