类型化数据集作为泛型返回类型



我有两个返回类型化数据集的方法。我只想有一个通用方法。

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查询绝对可以是任何东西,因此您需要非常小心它们。

最新更新