一句话;不。 TableAdapter Insert 方法是响应在 tableadapter 向导设置期间勾选 GenerateDBDirect 复选框而生成的,并且 Insert/Update/Delete 的直接方法仅以您看到的格式存在
话虽如此,您可以将强类型 DataRow 传递给 Update 方法,因为它具有用于将数据集/数据表/数据行/单个数据行的集合中的更改持久化到数据库的重载
这意味着您可以,而不是执行以下操作来插入一行:
personTA.Insert("John", "Smith", 30, "1 The Road");
构建状态为已添加的数据行并更新它,这将导致 SQL INSERT 运行:
var ro = personDataTable.NewPersonRow();
ro.FirstName = "John";
ro.LastName = "Smith";
ro.Age = 30;
ro.Address = "1, The Road";
personDataTable.AddPersonRow(ro);
//even though it's called Update, this will insert the record to the table, because it's RowState is Added
personTA.Update(ro);
这更像是打算使用 TableAdapter 的方式:将数据行绑定到文本框,用户输入文本框,然后使用 Update() 将更改保存到数据库。您实际上不需要做任何工作,因此编写代码比执行以下操作更省力:
personTA.Insert(_firstNameTextBox.Text, _lastNameTextBox.Text, …)
当您使用强类型数据集时,可以通过简单的拖动操作创建数据绑定文本框等,方法是将相关节点从 DataSOurces 窗口中拉出并将其拖放到表单上。如果你没有使用这个/没有 UI/没有数据绑定,那么考虑有一些其他的方法可以让你的生活更轻松。如果你的数据已经在一个数组中,那么你可以设置行的ItemArray:
var ro = personDataTable.NewPersonRow();
ro.ItemArray = array_with_person_data;
personDataTable.AddPersonRow(ro);
personTA.Update(ro);
抱歉,这是 C# 语法;我刚刚看到您已标记 VB。但是,对于编码的这个特定方面,两种语法没有显着差异 - 我认为在精神上删除分号并将 var 更改为 Dim 将这个特定的 C# 转换为 VB 所需的全部内容
编辑:
不要忘记,通常允许您将自己的代码添加到 Microsoft 在设计器中为您提供的任何内容中。如果您在设计界面中双击一个 tableadapter,您将被带到一个空的部分类,您可以在其中添加另一个/您自己的 Insert 重载,也许它需要一个数组,然后简单地调用生成的插入,使用所有参数顺序:
Namespace YourProgram.YourDataSetTableAdapters{
Partial Class YourTableAdapter
//ADD YOUR OWN INSERT METHOD HERE
Public Function Insert(things as Object()){
Return this.Insert( _
DirectCast(things[0] as String), _
DirectCast(things[1] as String), _
DirectCast(things[2] as Int32), _
DirectCast(things[0] as String) _
)
End Function
End Class
End Namespace
我已经猜到了这个 VB;它可能有语法错误,希望你明白