ADO.NET数据库访问的一个缺陷和补救思路
在C#中,访问数据库的典型方法是:
// connect to my local server, northwind db
string connectionString = "server=(local)//NetSDK;" +
"Trusted_Connection=yes; database=northwind";
// get records from the customers table
string commandString =
"Select CompanyName, ContactName from Customers";
// create the data set command object
// and the DataSet
SqlDataAdapter DataAdapter =
new SqlDataAdapter(
commandString, connectionString);
DataSet DataSet = new DataSet( );
// fill the data set object
DataAdapter.Fill(DataSet,"Customers");
其访问数据库的模型是:DB-> SqlDataAdapter ->DataSet.
我们看到,在初始化SqlDataAdapter对象的时候,传入了SQL命令字符串和数据库的连接字符串;其中SQL命令字符串指明了访问数据库的表名。但是在填充数据集对象DataSet.的时候,仍然需要指明表名。你可以不指定表名,系统会给你一个默认的表名Tablen(n是一个递增的数字)。
我们认为这是一个缺陷。理想的结果应该是,在初始化DataSet对象的时候,如果不指定表名,默认的结果应该是在SQL命令字符串中指明的表名,而不是Tablen;除非你想显式的改变表的名称。
造成目前这个结果的原因可能是由于SQL命令字符串是非结构化的,也即SQL命令字符串不能显式的设定表名。如果使用一个类来包装SQL命令字符串,那么SqlDataAdapter对象可以显式的知道表名,而DataSet对象也就可以使用这个表名作为默认的表名了。(不过这是ADO.NET设计人员的事情了:)。