2017-08-28 8 views
0
public static SqlParameter AddParameter(string parameterName,object value,SqlDbType DbType,int size) 
    { 

     SqlParameter param = new SqlParameter(); 
     param.ParameterName = parameterName; 
     param.Value = value ?? (object)DBNull.Value; 
     param.SqlDbType = DbType; 
     param.Size = size; 
     param.Direction = ParameterDirection.Input; 
     return param; 
    } 

    public static DataTable ExecuteDTByProcedure(string ProcedureName ,SqlParameter[] Params) 
    { 

     SqlConnection con = new SqlConnection(ConnectionString); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = ProcedureName; 
     cmd.Parameters.AddRange(Params); 


     cmd.CommandType = CommandType.StoredProcedure; 
     SqlDataAdapter sda = new SqlDataAdapter(cmd); 
     DataTable dtable = new DataTable(); 
     try 
     { 

      sda.Fill(dtable); 

     } 
     catch (Exception ex) 
     { 

     } 
     finally 
     { 
      sda.Dispose(); 
      cmd.Parameters.Clear(); 
      cmd.Dispose(); 
      con.Dispose(); 

     } 


     return dtable; 

    } 




} 

}残りのコードは動作していても正常に動作していますが、私のクラスではこのエラーが発生しています。

Error:Line 43: cmd.Connection = con; Line 44: cmd.CommandText = ProcedureName; Line 45: cmd.Parameters.AddRange(Params); Line 46: Line 47:

SqlParameterCollectionは、非ヌルSqlParameter型オブジェクトを受け付けます。 パラメータ名:値

+0

さて、エラーがあなたもそれをデバッグしようでした...あなたは明らかにパラメータの有効なインスタンスを供給していない...間違っている正確に何を言っていますか? –

+0

'SqlParameter'配列の使い方のサンプルコードがまだ表示されていません(1つ以上のパラメータにnullオブジェクトが含まれている可能性があります)。 'AddParameter'メソッドのコンテンツには何も問題はないようですが、どのように使用しているのかは間違いです。 –

+0

解決策を見つけました。他のクラスでは、addproducts()関数を次のように使用していました。 –

答えて

0

I found the Solution. In array of SqlParameters, i was inserting with the same index number , where as it must be having indexes starting from 0

SqlParameter []パラメータ=新しいSqlParameter [4]。

 parameters[0] = DataLayer.DataAccess.AddParameter("@ProductName",ProductName,System.Data.SqlDbType.VarChar, 300); 

     parameters[0] = DataLayer.DataAccess.AddParameter("@ProductDescription", ProductDescription, System.Data.SqlDbType.VarChar, 1000); 

     parameters[0] = DataLayer.DataAccess.AddParameter("@ProductPrice",ProductPrice,System.Data.SqlDbType.Int, 100); 

     parameters[0] = DataLayer.DataAccess.AddParameter("@ProductImage",ProductImage,System.Data.SqlDbType.VarChar,500); 


       DataTable dt = DataLayer.DataAccess.ExecuteDTByProcedure("Sp_AddNewProduct", parameters); 

Here is the correct code:

SqlParameter []パラメータ=新しいSqlParameter [4]。

 parameters[0] = DataLayer.DataAccess.AddParameter("@ProductName",ProductName,System.Data.SqlDbType.VarChar, 300); 

     parameters[1] = DataLayer.DataAccess.AddParameter("@ProductDescription", ProductDescription, System.Data.SqlDbType.VarChar, 1000); 

     parameters[2] = DataLayer.DataAccess.AddParameter("@ProductPrice",ProductPrice,System.Data.SqlDbType.Int, 100); 

     parameters[3] = DataLayer.DataAccess.AddParameter("@ProductImage",ProductImage,System.Data.SqlDbType.VarChar,500); 


       DataTable dt = DataLayer.DataAccess.ExecuteDTByProcedure("Sp_AddNewProduct", parameters); 

Note all index numbers are not zero in "Parameters[]"

関連する問題