我看到很多参考资料说 TableAdapter 很弱而且很愚蠢,并且任何真正的开发人员都会使用 DataAdapter。我不知道这是否属实,但我正在探索这个问题,并强调整个“DataAdapter/TableAdapter 针对 Typed DataSets”的气味有多糟糕。
让我试着解释一下……
假设我在 xsd 文件中有我的 Typed DataSet 定义,现在我准备在代码中创建一个 DataAdapter,针对该模式......(顺便说一下,我正在使用 OleDb 访问独立的 .dbf 文件文件夹...这里没有要调用的 SQL Server 存储过程,只是普通的旧原始表,准备好执行操作。)
从我目前的研究来看,这是我如何看待 DataAdapter 与 Typed DataSet 一起使用的。告诉我我是否错了。(最后我有我的大抱怨/问题。)
public DataTable GetJobsByCustomer(string CustNo)
{
OleDbConnection conn1 = new OleDbConnection(dbConnectionString);
conn1.Open();
LMVFP ds1 = new LMVFP(); //My Typed DataSet
string sqlstring = @"SELECT act_compda, contact, cust_num, est_cost, invoiced, job_hours,
job_invnum, job_num, job_remark, job_start, mach_cost, mat_cost, mat_mkup,
p_o_num, priority, quote_no, quoted_by, ship_date, ship_info, shop_notes, status, total_cost
FROM job_info
WHERE (cust_num = ?) AND (status = 'A')
ORDER BY priority";
OleDbDataAdapter JobsAdapter = new OleDbDataAdapter(sqlstring,conn1);
JobsAdapter.SelectCommand.Parameters.Add("?", OleDbType.VarChar,6).Value=CustNo;
JobsAdapter.Fill(ds1, "Jobs"); // A table schema in the Typed DataSet
return ds1.Jobs;
}
事情是这样的吗?它确实有效,所以这很好。确实,强类型行为很棒。
现在,我的抱怨......你的意思是告诉我,我已经在我的 DAL 方法 (GetJobsByCustomer) 中维护了相同的 exaxt SQL 语法,以匹配 xsd 中表的架构?在我的手工编码的 SQL 和 xsd 模式之间进行如此多的维护和分离真是太疯狂了。根本没有错误,因为您正在编写文本字符串!您可以在运行时确定它是否有效。
当您在代码中键入所有 SQL 时,必须来回查看以使您的编码 SQL 与 xsd 表模式保持同步,这很糟糕。
当然,我错过了一些东西。
真是一场闹剧。类型化的数据集可以与漂亮的智能感知一起使用,因为它是从模式生成的,但是归根结底,编写与类型化模式匹配的 SQL 只是一件痛苦的事。他们所做的只是将头痛转移到一个新的领域。
请告诉我,我在这里遗漏了一些可以使情况变得更好的东西。