2017-08-28 10 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'數組的示例代碼(可能有一個或多個參數包含空對象)。 「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[]"

相關問題