ジェネリックを使用して結合したい 2 つの関数があります。
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;
}
しかし、上記のエラーが表示されます。
コンテナーを動的に変更すると、コンパイルされます。しかし、それはハックのようです。2 つの機能を組み合わせる適切な方法は何ですか?