日期:2014-05-19  浏览次数:20664 次

请问怎样做一个通用的填充dataset的过程?
把存储过程的名称、参数放在一个字符串里,用分隔符隔开,循环用AddWithValue动态加载参数,这样有可能实现吗?下面改成动态的要怎么改?

        public   bool   FillDataset(ref   SqlConnection   myConn,   ref   DataSet   ds,   ref   string   name,ref   string   d1,   ref   string   d2)
                {
                        SqlDataAdapter   da   =   new   SqlDataAdapter(name,   myConn);
                        da.SelectCommand.CommandType   =   CommandType.StoredProcedure;
                        da.SelectCommand.Parameters.AddWithValue( "@d1 ",   d2);
                        da.SelectCommand.Parameters.AddWithValue( "@d2 ",   d2);
                        try
                        {
                                da.Fill(ds,   "UserTable ");
                        }
                        catch
                        {
                                return   false;
                        }
                        return   true;
                }

------解决方案--------------------
up
------解决方案--------------------
这么做除了把重复写的代码几行少写几次之外,有意义吗?
算是模块化还是算作更好的面向对象了?
如果调用你函数的同事需要根据Fill的DataTable的名字来做一些逻辑判断怎么办?
------解决方案--------------------
如果查询的结果差异很大,你自动填充有什么用。
自动填充过程是可以的。fill中的表名是别名而已。
------解决方案--------------------
作成动态的就是拼接字符串了
public bool FillDataset(ref SqlConnection myConn, ref DataSet ds, ref string name,ref string d1, ref string d2)
{string testSql= "exec "+name+ " ' "+d1+ " ', ' "+d2+ " ' ";
SqlDataAdapter da = new SqlDataAdapter(testSql, myConn);
da.SelectCommand.CommandType = CommandType.Text;
//da.SelectCommand.Parameters.AddWithValue( "@d1 ", d2);
//da.SelectCommand.Parameters.AddWithValue( "@d2 ", d2);
try
{
da.Fill(ds, "UserTable ");
}
catch
{
return false;
}
return true;
}
PS:不知道你为什么要用ref参数


------解决方案--------------------
bitpolar(独自看天) 说的没错。
------解决方案--------------------
看微软的MicrosoftEnterprise Library January 2006