【问题标题】:Update using stored procedure in ASP.NET MVC 5使用 ASP.NET MVC 5 中的存储过程进行更新
【发布时间】: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));
}

谁能帮我解决这个问题?请解释...

谢谢。

【问题讨论】:

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


【解决方案1】:
 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++。

从你的 Action 调用函数

 var dataset = new DataSet();
        var args = new object[] { "Hello", "World", 123, true, "ddd", 1 };
        CommonHelper.LoadDataSet(ref dataset, "sp_CapNhat", args);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多