C# SqlParameterCollection仅接受非空的SqlParameter类型对象,而不接受IDbDataParameter[]对象
我有一种将数据插入数据库的方法: 更新前C# SqlParameterCollection仅接受非空的SqlParameter类型对象,而不接受IDbDataParameter[]对象,c#,.net,C#,.net,我有一种将数据插入数据库的方法: 更新前 public DataSet Get(WorkEntry t, string callingPage, string operation) { // Start the Insert Update Method IDbDataParameter[] param = null; DataSet returnValue = null; try { param = CreateParams(t, c
public DataSet Get(WorkEntry t, string callingPage, string operation)
{
// Start the Insert Update Method
IDbDataParameter[] param = null;
DataSet returnValue = null;
try
{
param = CreateParams(t, callingPage, operation);
param[0].Value = t.AutoID;
param[1].Value = t.OperatorName;
param[2].Value = t.Date;
param[3].Value = t.StartDate;
param[4].Value = t.EndDate;
SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());
sqlConnection.Open();
SqlCommand command = sqlConnection.CreateCommand();
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "spWorkEntry";
command.Parameters.Add(param);
da_G = new SqlDataAdapter(command);
cmdB_G = new SqlCommandBuilder(da_G);
da_G.Fill(returnValue);
return returnValue;
}
catch (Exception ex)
{
throw ex;
}
finally
{
param = null;
command.Parameters.Clear();
}
}// End the Insert Update Method
// Get-----------------------------------------------------------------------------------------
public DataSet Get(WorkEntry t, string callingPage, string operation)
{ // Start the Insert Update Method
SqlParameter[] param = null;
DataSet returnValue = null;
try
{
param = (SqlParameter[])CreateParams(t, callingPage, operation);
param[0].Value = t.AutoID;
param[1].Value = "sdf";
param[2].Value = t.Date;
param[3].Value = t.StartDate;
param[4].Value = t.EndDate;
SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());
sqlConnection.Open();
SqlCommand command = sqlConnection.CreateCommand();
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "spWorkEntry";
command.Parameters.Add(param);
da_G = new SqlDataAdapter(command);
cmdB_G = new SqlCommandBuilder(da_G);
da_G.Fill(returnValue);
return returnValue;
}
catch (Exception ex)
{
throw ex;
}
finally
{
param = null;
command.Parameters.Clear();
}
}// End the Insert Update Method
// Get End -----------------------------------------------------------------------------------------
-----------------------------------
更新后
public DataSet Get(WorkEntry t, string callingPage, string operation)
{
// Start the Insert Update Method
IDbDataParameter[] param = null;
DataSet returnValue = null;
try
{
param = CreateParams(t, callingPage, operation);
param[0].Value = t.AutoID;
param[1].Value = t.OperatorName;
param[2].Value = t.Date;
param[3].Value = t.StartDate;
param[4].Value = t.EndDate;
SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());
sqlConnection.Open();
SqlCommand command = sqlConnection.CreateCommand();
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "spWorkEntry";
command.Parameters.Add(param);
da_G = new SqlDataAdapter(command);
cmdB_G = new SqlCommandBuilder(da_G);
da_G.Fill(returnValue);
return returnValue;
}
catch (Exception ex)
{
throw ex;
}
finally
{
param = null;
command.Parameters.Clear();
}
}// End the Insert Update Method
// Get-----------------------------------------------------------------------------------------
public DataSet Get(WorkEntry t, string callingPage, string operation)
{ // Start the Insert Update Method
SqlParameter[] param = null;
DataSet returnValue = null;
try
{
param = (SqlParameter[])CreateParams(t, callingPage, operation);
param[0].Value = t.AutoID;
param[1].Value = "sdf";
param[2].Value = t.Date;
param[3].Value = t.StartDate;
param[4].Value = t.EndDate;
SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());
sqlConnection.Open();
SqlCommand command = sqlConnection.CreateCommand();
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "spWorkEntry";
command.Parameters.Add(param);
da_G = new SqlDataAdapter(command);
cmdB_G = new SqlCommandBuilder(da_G);
da_G.Fill(returnValue);
return returnValue;
}
catch (Exception ex)
{
throw ex;
}
finally
{
param = null;
command.Parameters.Clear();
}
}// End the Insert Update Method
// Get End -----------------------------------------------------------------------------------------
此行上发生错误:
command.Parameters.Add(param);
Param是IDbDataParameter[]
的数组&数组中的值如下所示:
param[0].Value = 123;
param[1].Value = "asdf";
param[2].Value = "sdfs";
param[3].Value = "sdfsdf";
param[4].Value = "sdfsdf";
然后错误也会发生,因为param应该不可为null。没有将数组作为参数的
Add()
重载。这种编译的唯一原因是因为存在一个重载,它接受一个对象
。quick将显示一个AddRange
方法,该方法将接受SqlParameter
数组。因此,您应该将数组类型设置为SqlParameter[]
,而不是IDBDataParameter[]
,或者在有其他代码使用它并依赖该接口时强制转换它 更改了你告诉我的代码,然后也出现了相同的错误,请检查更新的代码question@HardikParmar,AddRange()
,而不是Add()
。当类型可以接受数组时,这是.Net中的常见模式-查找AddRange
方法。