【发布时间】:2017-05-27 02:15:51
【问题描述】:
我有一个使用存储过程更新用户数据的演示测试。
这是我的存储过程代码:
ALTER PROC sp_CapNhat
@maNV nvarchar(10),
@hoNV nvarchar(50),
@tenNV nvarchar(100),
@gioiTinh bit,
@diaChi nvarchar(150),
@tienLuong int
AS
BEGIN
UPDATE NhanVien
SET Ho = @hoNV,
Ten = @tenNV,
GioiTinh = @gioiTinh,
DiaChi = @diaChi,
TienLuong = @tienLuong
WHERE MaNV = @maNV
SELECT * FROM NhanVien
END
然后类连接到 SQL Server:
public static void LoadDataSet(ref DataSet ds, string procName, params object[] parameters)
{
SqlConnection con = new SqlConnection(connectionString);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
SqlDataAdapter da = new SqlDataAdapter(procName, con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(da.SelectCommand);
if (da.SelectCommand.Parameters.Count - 1 != parameters.Length)
{
return;
}
int i = 0;
foreach (SqlParameter pr in da.SelectCommand.Parameters)
{
if (pr.Direction == ParameterDirection.Input || pr.Direction == ParameterDirection.InputOutput)
{
pr.Value = parameters[i];
}
}
da.Fill(ds);
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
当我将参数从用户传递到更新时,我得到一些错误转换变量:
将参数值从字符串转换为布尔值失败
@tienLuong int 类似
这是我在 ActionResult 中将参数传递给过程的代码:
public ActionResult CapNhat(NhanVien obj)
{
return View("Index", Common.LoadDataTable("sp_CapNhat", obj.maNV, obj.hoNV, obj.tenNV, obj.gioiTinh, obj.diaChi, obj.tienLuong));
}
谁能帮我解决这个问题?请解释...
谢谢。
【问题讨论】:
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
obj.gioiTinh是布尔类型吗?
标签: c# sql-server stored-procedures asp.net-mvc-5