我希望有一个接收sqlDataAdapter或常规oleDataAdapter的函数,因为对象参数让我们称之为dbAdapter。然后,我想使用dbAdapter访问与传递给函数的数据适配器相关联的行。这可能吗?我想避免传递一个参数来告诉使用哪个参数,然后为每个case添加一个if语句,其中包含一组几乎相同的代码。因此,假设,函数将类似于:
private void LoadRow(object dbAdapter, int theRow)
{
txtID.Text = dbAdapter.Rows[theRow]["ID"].ToString();
}
并且调用看起来像:
LoadRow(sqlDbAdapter, 1);
或
LoadRow(oleDbAdapter, 1);
其中sqlDbAdapter声明为SqlDataAdapter,oleDbAdapter声明为OleDataAdapter。
我想我可以向函数传递一个值,指示使用哪一个,然后使用if语句创建哪个数据适配器用于相同的变量名....如:
if (adapterType = "sql")
{
SqlDataAdapter dbAdapter = new SqlDataAdapter;
}
else
{
OleDataAdapter dbAdapter = new OleDataAdapter;
}
我认为每个适配器类型的所有命令和其他参数都是相同的....但是如果可能的话,我想通过引用传递对象......
请告诉我你的想法和建议......
谢谢!
瓦尔哈拉
答案 0 :(得分:1)
如果您 这样做,我会使用扩展方法:
public static string LoadRow(this SqlDataAdapter adapter, int theRow)
{
//return something you need
}
public static string LoadRow(this OleDataAdapter adapter, int theRow)
{
//return something you need
}
用法如下:
myOleDataAdapter.LoadRow(9);
mySqlDataAdapter.LoadRow(5;
编辑 - 要回答批评者的意见,如果IDbDataAdapter
中包含您需要的所有内容,则可以执行此操作,因为您尝试使用的两个适配器都会实现它。 / p>
public static string LoadRow(this IDbDataAdapter adapter, int theRow)
{
//return something you need
}
答案 1 :(得分:0)
解决方案是:
private void LoadRow(DbDataAdapter dbAdapter, int theRow){
DataSet dataSet = new DataSet();
dbAdapter.Fill(dataSet);
txtID.Text = dataSet.Tables["myTable"].Rows[theRow]["ID"].ToString();
}
但小心使用,因为如果在大型数据集上多次使用.Fill()
方法,可能会导致速度变慢。
我的建议是只填充一次数据集并尽可能多地使用它然后释放它,或者如果它不会变得太大,请将其保存在内存中并在您认为它是适当的时候刷新它。
答案 2 :(得分:-3)
一个简单的选择是重载方法,只需创建两次,对象是SqlDataAdapter,另一次是OleDataAdapter。