我正在使用C#VS2010 TableAdapter向导为我的项目与我的数据库进行交互。我为此适配器生成了自己的Insert,Update和Delete命令,因为它使用了一个连接而无法生成自己的连接。我没关系,但不幸的是,当我创建Insert命令时,我无法在tableadapter上调用“Insert()”方法。其他方法工作正常。
例如,
`this.joinTableAdapter = new MyTableAdapter();
this.joinTableAdapter.Insert()< - 不存在。
我的理解是,一旦创建了有效的插入命令,该方法就会在表适配器上可见。我错了吗?它适用于我的更新和删除命令。我有什么想法吗?
感谢任何帮助。谢谢大家!
答案 0 :(得分:1)
TableAdapter GenerateDbDirectMethods
除了InsertCommand,UpdateCommand和DeleteCommand之外,还使用可以直接针对数据库执行的方法创建TableAdapter。可以直接调用这些方法(TableAdapter.Insert,TableAdapter.Update和TableAdapter.Delete)来操作数据库中的数据。
如果您不想创建这些直接方法,请将TableAdapter的GenerateDbDirectMethods属性设置为false(在“属性”窗口中)。添加到TableAdapter的其他查询是独立查询 - 它们不会生成这些方法。
您可以在最后一页的设计师处找到此选项。 创建将更新直接发送到数据库的方法
注意:这与单击“高级选项”并单击“
”不同生成插入,更新和删除语句
当您选择此选项时,向导将尝试根据Generate SQL statements页面上定义的SELECT语句生成INSERT,UPDATE和DELETE语句。
修改强>
当主选择查询中涉及多个表时,TableAdapter无法自动创建insert,update和delete语句。如果您需要一列或多列相关表,有几种方法,最好的方法取决于您的要求。
InsertUser(param1,param2)
)Update
时,会从TableAdapter中隐含地触发这些命令。 DataRow的RowState确定将触发哪个命令(f.e。Added-> InsertCommand)。对于第三种方法,您可以使用LINQ-To-DataSet来连接相关表以获取所有需要的列(例如,为GridView创建一个DataSource)。
答案 1 :(得分:0)
使用JOIN查询有第四种方法。
对于表适配器的主查询,省略连接。然后,手动将列添加到数据表,并将其SourceColumn设置为要添加的字段的精确拼写。最后,向包含连接的表适配器添加新查询,并调用此查询以填充应用程序中的数据表。
如果这太简陋了,请告诉我。我会详细说明。
答案 2 :(得分:0)
进入数据集,点击tableadaptor并检查属性“GenerateDBDirectMethods”的设置 - 需要为真