【问题标题】:Is it possible to pass a single variable containing many parameters to an Insert query ln TableAdapter?是否可以将包含许多参数的单个变量传递给插入查询 ln TableAdapter?
【发布时间】:2019-11-12 20:04:00
【问题描述】:

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

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

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

TableAdapter.Insert(all_parameters)

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

【问题讨论】:

    标签: vb.net tableadapter


    【解决方案1】:

    一句话;不。 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;它可能有语法错误,希望你明白

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2016-01-26
      • 2012-10-12
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多