2017-01-12 23 views
1

私は、ストアドプロシージャを使用してユーザーからのデータを更新するデモテストを行っています。ASP.NET MVC 5のストアドプロシージャを使用した更新

:私はいくつかのエラーを取得するキャスト変数更新する

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

を、私は、ユーザーからのパラメータを渡すとき: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型と同様の

はの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)); 
} 

誰が私はこの問題を解決する手助けすることはできますか?説明してください...

ありがとうございました。

+0

サイドノート:あなたは** **あなたのストアドプロシージャのための 'sp_'接頭辞を使用しないでください。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –

+0

'obj.gioiTinh'ブール型ですか? –

答えて

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

オグ、私の間違い... @ Jignest Hirparaありがとう – user1465351

関連する問題