但用第一种方式有这个问题,前面忘记说了。 比如有这样一个公共数据访问类: public class db { private DataTable m_DataTable; public DataTable execsql(param...) { ... m_Adapter.Fill(m_DataTable); return m_DataTable; } }现在,我有这样一个实际的调用序列: DataRow dr = db.execsql('select * from table1').Rows[0]; string a = dr[0]; string b = dr[1]; //现在我需要用dr[2]的值从数据库中来得到另一个值,有可能是一个下拉列表,需要邦定值 DropDownList1.datasource = db.execsql('select c1, c2 from table2 where c3 = ' + dr[3]); DropDownList1.bind(); //注意,下面这句的数据将出错,因为这个时候,DB中的m_DataTable已经不对了 string c = dr[4];
public class db { private static DataTable m_DataTable; public DataTable execsql(param...) { if (m_DataTable==null) m_DataTable=new DataTable(); ... m_Adapter.Fill(m_DataTable); return m_DataTable; } }
比如有这样一个公共数据访问类:
public class db
{
private DataTable m_DataTable;
public DataTable execsql(param...)
{
...
m_Adapter.Fill(m_DataTable);
return m_DataTable;
}
}现在,我有这样一个实际的调用序列:
DataRow dr = db.execsql('select * from table1').Rows[0];
string a = dr[0];
string b = dr[1];
//现在我需要用dr[2]的值从数据库中来得到另一个值,有可能是一个下拉列表,需要邦定值
DropDownList1.datasource = db.execsql('select c1, c2 from table2 where c3 = ' + dr[3]);
DropDownList1.bind();
//注意,下面这句的数据将出错,因为这个时候,DB中的m_DataTable已经不对了
string c = dr[4];
{
private static DataTable m_DataTable;
public DataTable execsql(param...)
{
if (m_DataTable==null)
m_DataTable=new DataTable();
...
m_Adapter.Fill(m_DataTable);
return m_DataTable;
}
}
如果采用第二种方法,如你所说,需要许多逻辑判断的话,我认为如果效率上的改进不大,没有必要。
对SqlConnection,CommandBuilder,SqlCommand,DataAdapter这类不需要保存旧有的值的对象,在公共类中只存在一个实例
而对DataSet,DataTable这类有可能取旧有值对对象,就每次访问,都new一次,最后用.NET自己收集
public static string GetMyString(){
return "hello,world!";
}