C# 在ASP.NET MVC 5中使用存储过程进行更新
我有一个使用存储过程更新用户数据的演示测试 这是我的存储过程代码:C# 在ASP.NET MVC 5中使用存储过程进行更新,c#,sql-server,stored-procedures,asp.net-mvc-5,C#,Sql Server,Stored Procedures,Asp.net Mvc 5,我有一个使用存储过程更新用户数据的演示测试 这是我的存储过程代码: 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,
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();
}
}
当我将参数从用户传递到更新时,我得到一些错误转换变量:
无法将参数值从字符串转换为布尔值
@天龙国际酒店
下面是我在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));
}
有人能帮我修一下吗?请解释一下
谢谢
public static void LoadDataSet(ref DataSet ds, string name, params object[] parameters)
{
SqlConnection con = new SqlConnection(connectionString);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
SqlDataAdapter da = new SqlDataAdapter(name, 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];
i++;
}
}
da.Fill(ds);
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
在上述代码中添加了i++。
以及从您的操作调用函数
var dataset = new DataSet();
var args = new object[] { "Hello", "World", 123, true, "ddd", 1 };
CommonHelper.LoadDataSet(ref dataset, "sp_CapNhat", args);
在上述代码中添加了i++。
以及从您的操作调用函数
var dataset = new DataSet();
var args = new object[] { "Hello", "World", 123, true, "ddd", 1 };
CommonHelper.LoadDataSet(ref dataset, "sp_CapNhat", args);
旁注:存储过程不应使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀!Isobj.gioiTinh
boolean类型?旁注:存储过程中不应使用sp_ugh
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀!是obj.gioiTinh
boolean类型吗?