正在将数据类型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))
您的设计有问题。如何使用Name
和Id
中的相同字段?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));