正在将数据类型nvarchar转换为int

本文关键字:转换 int nvarchar 数据类型 | 更新日期: 2023-09-27 18:28:13

我有这个存储过程:

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

正在将数据类型nvarchar转换为int

您的设计有问题。如何使用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);

这应该可以解决您的问题

我建议使用以下实现方式:

  • 创建两个不同的存储过程——一个用于数字ID,另一个用于字母数字查询
  • 在你的Winforms应用程序上检测用户键入的内容是否为数字-你可以检查TryParse来实现这一点
  • 根据输入类型使用一个或另一个

希望它对你有用。

更改

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

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