我有两个返回类型化数据集的方法。我只想有一个通用方法。
private TypedDataSet GetData(string query, string tblName)
{
string conString = .... ;
SqlCommand cmd = new SqlCommand(query);
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (TypedDataSet tds = new TypedDataSet ())
{
sda.Fill(tds , tblName);
return tds ;
}
}
}
}
这应该相当简单,只需更改方法签名以使用泛型类型并添加约束,例如:
private T GetData<T>(string query, string tblName)
where T : DataSet, new()
{
string conString = .... ;
SqlCommand cmd = new SqlCommand(query);
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
// Use T here instead of TypedDataSet
using (T tds = new T())
{
sda.Fill(tds , tblName);
return tds;
}
}
}
}
现在可以像这样调用该方法:
var typedDataSet = GetData<TypedDataSet>("foo", "bar");
请注意,泛型类型约束DataSet
以确保可以将其传递到 SqlDataAdapter.Fill
方法中并new()
以便可以在方法中创建实例。
注意:此方法的主要问题是SQL查询绝对可以是任何东西,因此您需要非常小心它们。