我正在开发ADO.NET数据提供程序和关联的DDEX提供程序。我无法说服Visual Studio TableAdapater配置向导生成SQL语句以在插入和更新后刷新数据表。它生成insert和delete语句,但不会生成select语句来进行刷新。
可以通过将表从Server Explorer(在Visual Studio内部)中删除到DataSet(例如,DataSet1.xsd)来访问所引用的功能。它创建一个TableAdapter对象并配置SELECT,UPDATE,DELETE和INSERT语句。如果右键单击TableAdapter对象,则上下文菜单中有一个“Configure”选项,用于启动“TableAdapter配置向导”。该向导的第一个对话框有一个“高级选项”按钮,该按钮将显示一个名为“刷新数据表”的选项。当与SQL Server表一起使用时,该选项会将“select field1,field2,...”形式的语句添加到TableAdapter的InsertCommand和UpdateCommand命令的末尾。
您是否知道可能需要从DDEX提供程序(或ADO.NET数据提供程序)公开哪些类型的属性或接口,以使Visual Studio将这些刷新语句添加到update / insert命令?< / p>
Advanced SQL Generation Options Dialog Box的MSDN文档中有一条说明,“只有支持批处理SQL语句的数据库才支持刷新数据表。”这似乎意味着.NET数据提供程序可能需要公开支持表示此类行为的某些属性。但我找不到它。有什么想法吗?
答案 0 :(得分:0)
TableAdapter中的刷新功能意味着tableadapter操作的关联数据表将在操作完成后具有更新的数据。
如果调用tableadapter的insert方法并传递数据行或数据表以进行插入操作,tableadapter将刷新数据表/数据行以反映插入操作后数据库中的最新值。如果数据库中的表已为要插入的给定行的insert命令生成唯一ID或自动编号,则原始数据行的p.key列将反映数据库中的自动生成id值。如果您在向导配置中将refresh选项设置为true,则tableadapter将使用此刷新。
现在这个'刷新'tableadapter将在单个批处理中执行2个查询,首先是Insert,然后是带有scope_identity的select。
如果在TableAdapter
上关闭了Refresh,则我的默认插入命令将触发此单个SQLINSERT INTO Table (coloumns) VALUES (values);
但是,如果在TableAdapter上打开了Refresh,则我的默认Insert命令将触发这些SQL语句批处理。作为参数传递给Insert()的Datarow也将在成功执行后更新。
INSERT INTO Table (coloumns) VALUES (values);
SELECT coloumns FROM Table WHERE (PKeyID = SCOPE_IDENTITY())