使用ASP.NET MVC 5中的存储过程进行更新

时间:2017-01-12 04:45:11

标签: c# sql-server stored-procedures asp.net-mvc-5

我使用存储过程进行演示测试,以更新用户的数据。

这是我的存储过程代码:

Worksheets

类连接到SQL Server:

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

当我将参数从用户传递到更新时,我得到了一些错误转换变量:

  

无法将参数值从字符串转换为布尔值

@tienLuong int similar

这是我的代码将参数传递给ActionResult中的过程:

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();
    }
}    

有人可以帮我解决这个问题吗?请解释......

感谢。

1 个答案:

答案 0 :(得分:0)

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