刚才问了个数据库连接的 现在请教一个读取类的:
如:namespace BProc
{
public DataSet Re_DataSet(string strProName, ProceducreParameter[] stProParameters)
{
using (B_SqlConn Exsql = new B_SqlConn())
{
DataSet ds = null;
Exsql.Open();
using (SqlCommand Cmd = new SqlCommand(strProName, Exsql.Conn))
{
Cmd.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < stProParameters.Length; ++i)//注意,不是“i++”!
{
ProceducreParameter stProPar = stProParameters[i];
SqlParameter sp = new SqlParameter(stProPar.TabStrName, stProPar.TabStrType, stProPar.TabStrSize);
sp.Direction = stProPar.TabStrDirection;
sp.Value = stProPar.TabStrValue;
Cmd.Parameters.Add(sp);
}
SqlDataAdapter da = new SqlDataAdapter(Cmd);
ds = new DataSet();
da.Fill(ds);
da.Dispose();
Cmd.Parameters.Clear();
Cmd.Dispose();
}
Exsql.Close();
Exsql.Dispose();
return ds;
}
}
}引用的时候:using BProc;ProcParameter Proce = new ProcParameter();
SqlDataReader sdr = Proce.Re_DataSet("储存过程名称",proc);还是使用静态: public static DataSet Re_DataSet(string strProName, ProceducreParameter[] stProParameters)
调用的时候直接:ProcParameter..Re_DataSet("储存过程名称",proc);哪个方法是最佳选择的,最专业合理的?这几年我一直用的都是实例化调用的方式,但不知道是不是最好的数据库类
如:namespace BProc
{
public DataSet Re_DataSet(string strProName, ProceducreParameter[] stProParameters)
{
using (B_SqlConn Exsql = new B_SqlConn())
{
DataSet ds = null;
Exsql.Open();
using (SqlCommand Cmd = new SqlCommand(strProName, Exsql.Conn))
{
Cmd.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < stProParameters.Length; ++i)//注意,不是“i++”!
{
ProceducreParameter stProPar = stProParameters[i];
SqlParameter sp = new SqlParameter(stProPar.TabStrName, stProPar.TabStrType, stProPar.TabStrSize);
sp.Direction = stProPar.TabStrDirection;
sp.Value = stProPar.TabStrValue;
Cmd.Parameters.Add(sp);
}
SqlDataAdapter da = new SqlDataAdapter(Cmd);
ds = new DataSet();
da.Fill(ds);
da.Dispose();
Cmd.Parameters.Clear();
Cmd.Dispose();
}
Exsql.Close();
Exsql.Dispose();
return ds;
}
}
}引用的时候:using BProc;ProcParameter Proce = new ProcParameter();
SqlDataReader sdr = Proce.Re_DataSet("储存过程名称",proc);还是使用静态: public static DataSet Re_DataSet(string strProName, ProceducreParameter[] stProParameters)
调用的时候直接:ProcParameter..Re_DataSet("储存过程名称",proc);哪个方法是最佳选择的,最专业合理的?这几年我一直用的都是实例化调用的方式,但不知道是不是最好的数据库类
Cmd.Parameters.Clear();
Cmd.Parameters.Clear();
Cmd.Dispose();
Exsql.Close();
Exsql.Dispose();
这几行代码都是画蛇添足。在using{}跳出的时候,会自动调用Exsql.Dispose(),而它会自动调用 Exsql.Close()。事实上你知道该写什么代码去释放什么东西,才应该写。不知道,多写一堆东西,没有任何作用(除了耽误一些程序运行时间以外)。最后说到你的Re_DataSet方法。这里使用static还是对象方法,都是可以的。我会比较愿意写为static方法。但是这绝非什么“效率”问题,而是因为我在写这个代码时就这个层次,还没有发现需要定义为对象方法的必要。反过来说,如果你的某种设计,需要定义为对象方法,例如你的类 ProcParameter 可能需要子类来扩展和对消(或者说重写)父类,那么自然我可能就定义以个叫做 Gt_DataSet 的对象方法(使用它必须先new一个对象,然后才调用它)以示跟 Re_DataSet 方法区分开来。不要在这么浅的地方过于纠结“专业不专业”的。你要是知道如何专业地设计程序,你就没有经历先把时间用在这种地方了。
{
public static DataSet Re_DataSet(......)
{
......
这种代码,我会在class的声明上就定义为static的,而省得再去考虑每个方法是否要写static的问题。但这我更愿意说是个人爱好。我绝对不会用“你不专业”这种说法去指责别人写为对象方法的代码。因为我认为这不但是重点,而且历史证明,这被用来攻击和指责别的初学者,已经脱离了技术范畴了。
是的,你说的没错 SqlDataReader sdr = Proce.Re_DataSet("储存过程名称",proc);我这个只是随便截取了个格式而已 呵呵