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.
并使用其他东西作为前缀,或者根本不使用前缀!Is
obj.gioiTinh
boolean类型?旁注:存储过程中不应使用
sp_ugh
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!是
obj.gioiTinh
boolean类型吗?