我有两个要使用泛型组合的功能。
static public DataTable GetDataTable(SqlParameterHash parameters, string sql,
string connectionString, CommandType commandType = CommandType.StoredProcedure)
{
var da = new SqlDataAdapter(sql, connectionString);
da.SelectCommand.CommandType = commandType;
da.SelectCommand.CommandTimeout = 0;
foreach (SqlParameter Parameter in parameters)
{ da.SelectCommand.Parameters.Add(Parameter); }
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
static public DataSet GetDataSet(SqlParameterHash parameters, string sql,
string connectionString, CommandType commandType = CommandType.StoredProcedure)
{
var da = new SqlDataAdapter(sql, connectionString);
da.SelectCommand.CommandType = commandType;
da.SelectCommand.CommandTimeout = 0;
foreach (SqlParameter Parameter in parameters)
{ da.SelectCommand.Parameters.Add(Parameter); }
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
这就是我想出的:
static private T GetDataX<T>(T container
, SqlParameterHash parameters, string sql, string connectionString
, CommandType commandType = CommandType.StoredProcedure
) where T : System.ComponentModel.MarshalByValueComponent, new()
{
var da = new SqlDataAdapter(sql, connectionString);
da.SelectCommand.CommandType = commandType;
da.SelectCommand.CommandTimeout = 0;
foreach (SqlParameter Parameter in parameters)
{ da.SelectCommand.Parameters.Add(Parameter); }
da.Fill(container); // ERROR: cannot convert from 'T' to 'System.Data.DataTable'
return container;
}
但我得到了上面显示的错误。
如果我将容器更改为动态它会编译。但这似乎是一个黑客行为。结合这两个功能的正确方法是什么?