是否可以将包含许多参数的单个变量传递给 Insert 查询 ln TableAdapter?

Is it possible to pass a single variable containing many parameters to an Insert query ln TableAdapter?

我在 VS 上使用 TableAdapter,有这样的东西:

TableAdapter.Insert(parameter1,parameter2,parameter3,...,parameterN)

并且想知道是否可以传递包含这些参数的单个变量,并得到如下内容:

TableAdapter.Insert(all_parameters)

注意:我想知道,因为我有时有很多参数要传递并且行代码变得非常大

一句话;不。 TableAdapter Insert 方法是响应在 tableadapter 向导设置期间勾选 GenerateDBDirect 复选框而生成的,Insert/Update/Delete 的直接方法仅以您看到的格式存在

也就是说,您可以将强类型的 DataRow 传递给 Update 方法,因为它具有用于将 dataset/datatable/collection of datarow/single 数据行中的更改持久保存到数据库的重载

这意味着您可以不执行以下操作来插入一行:

personTA.Insert("John", "Smith", 30, "1 The Road");

构建一个状态为 Added 的数据行,并更新它,这将导致 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 window 中拉出并将其拖放到表单上。如果你不使用这个/没有 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 在设计器中为您提供的任何内容。如果您在设计界面中双击一个表适配器,您将被带到一个空的部分 class ,您可以在其中添加 another/your 自己的 Insert 重载,也许一个需要一个数组然后只需调用生成的 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;它可能有语法错误,希望你能理解