如何使用DataRow更新数据库?

学生

首先,我在全局中创建了DataSet和MySQLDataAdapter。然后在Form_Load事件中,我像这样查询所有表。

        dS = New DataSet
        dA = New MySqlDataAdapter(myCommand)
        Using sqlConn As New MySqlConnection(connStr)
            myCommand = New MySqlCommand("Select ID, DevCompanyName from developer_name_table; Select ID, DevType from development_type_table; Select ID, Mukim from mukim_table; Select ID, Daerah from daerah_table; Select ID, Negeri from negeri_table; Select * from project_record ORDER BY FloatNo desc limit 1", sqlConn)
            sqlConn.Open()
            MsgBox("Connection open.")
            Dim myCB As New MySqlCommandBuilder(dA)

            dA.SelectCommand = myCommand
            dA.UpdateCommand = myCB.GetUpdateCommand
            dA.InsertCommand = myCB.GetInsertCommand
            dA.DeleteCommand = myCB.GetDeleteCommand

            dA.Fill(dS)
            dA.FillSchema(dS, SchemaType.Source)
            dS.Tables(0).TableName = "developer_name_table"
            dS.Tables(1).TableName = "development_type_table"
            dS.Tables(2).TableName = "mukim_table"
            dS.Tables(3).TableName = "daerah_table"
            dS.Tables(4).TableName = "negeri_table"
            dS.Tables(5).TableName = "project_record"
        End Using

一切工作正常,直到我尝试像这样将新记录添加到数据库中。下面的添加记录代码在按钮单击事件下。首先,我检查记录是否退出,然后像这样添加新行。

        For Each r As DataRow In dS.Tables("project_record").Rows()
            If r.Item("FloatNo") = TextBox1.Text.Trim() Then
                MsgBox("Project exist. Please recheck.")
                Exit Sub
            End If
        Next
        SecurityAdd() 'This is just to fill None if field are empty.
        Dim row = dS.Tables("project_record").NewRow()
        row.Item("FloatNo") = TextBox1.Text.Trim()
        row.Item("DevCompanyName") = ComboBox1.Text.Trim()
        row.Item("DevType") = ComboBox2.Text.Trim()
        row.Item("LotPt") = TextBox2.Text.Trim()
        row.Item("Mukim") = ComboBox3.Text.Trim()
        row.Item("Daerah") = ComboBox4.Text.Trim()
        row.Item("Negeri") = ComboBox5.Text.Trim()
        row.Item("TempReference") = RichTextBox1.Text.Trim()
        row.Item("PermanentNo") = 0
        row.Item("QuotationNo") = 0
        row.Item("InvoiceNo") = 0
        row.Item("Staff") = loggedUser.ToString() 'Just user ID.
        dS.Tables("project_record").Rows.Add(row)
        dA.Update(dS, "project_record")

更新后,我确定DataSet已更新,因为第二次单击添加记录时,消息框告诉我该记录已存在。但是,当我检查数据库时,没有新记录吗?我在这里做错了什么?

普萨·庞杰伦德拉普(PssaPøngjǣrdenlarp)

问题是您正在尝试配置,DataAdapter使其可在中的所有6个表上使用DataSet如果查看构建的INSERT或UPDATE命令,您会发现它们是所有表中所有列的混合物。设置一个DataAdapter为您完成艰苦的工作就可以在一张桌子上工作。

我不知道什么negeri,其余的翻译成什么,但是看起来只有一个是事务表。其余的DevCompanyName似乎是为项目记录表提供值的域/代码表。

通常,其中一些是根据业务规则固定的,而这些则不需要添加/更新的方法。其他人可能需要一种添加新项的方法,但只是偶尔地。手动进行这些更新,以便可以设置DA并将其与应用程序所关注的主表一起使用。如果有添加Mukim等人的表格或标签,只需在其中插入并刷新即可。

至少,我会将那些域表存储在一个单独的目录中DataSet,以便它们不会妨碍您,但仅使用其中一个,就可以像下面这样配置它:

Using dbcon As New MySqlConnection(MySQLConnStr)

        dsS = New DataSet
        dbcon.Open()

        ' add table 1 - Mukim
        dsS.Tables.Add("Mukim")
        Using cmd As New MySqlCommand("SELECT DeptCode, Descr FROM Department", dbcon)
            dsS.Tables("Mukim").Load(cmd.ExecuteReader())
            cboColors.DataSource = dsS.Tables("Mukim")
            cboColors.DisplayMember = "Descr"    ' ie "Management"
            cboColors.ValueMember = "DeptCode"   ' eg "MGMT"
        End Using

        ' add table 2 - negeri
        ' this table is fixed - new rows are very rare
        Using cmd As New MySqlCommand("SELECT DeptCode, Descr FROM cDepartment", dbcon)
            Dim dt As New DataTable
            dt.Load(cmd.ExecuteReader)
            cboDept.DataSource = dt
            cboDept.DisplayMember = "Descr"             ' "Sommelier"
            cboDept.ValueMember = "DeptCode"            ' "SOMM"
        End Using

        ' etc

        ' main transaction table - project
        ' do this last
        Dim prjcmd = New MySqlCommand(prjSql, dbcon)
        daSample = New MySqlDataAdapter(prjcmd)

        Dim cb As New MySqlCommandBuilder(daSample)
        daSample.SelectCommand = prjcmd
        daSample.InsertCommand = cb.GetInsertCommand
        ' etc

        dsS.Tables.Add("Project")
        daSample.Fill(dsS.Tables("Project"))
        daSample.FillSchema(dsS.Tables("Project"), SchemaType.Source)
    End Using

代码将那些域/代码表存储在DataSet可能会更改的域/代码表中代替适配器,它们使用填充DataReader任何固定的内容(例如“部门”)都将发布到相关的CBO并被遗忘。根据实际更新的频率,您可以对所有这些文件都使用此方法,并在它们获得新行时仅绑定到新表。

该代码还使用为相关CBODataTable创建的DataSource我不确定您的代码在做什么,因为它存储Combobox.Text如果我确实DataTable使用新条目进行了更新,则可以对其进行编码以使其自动显示。

结果是DataAdapter知道如何更新等主项目表,而不会被这些其他表所混淆。然后插入就可以了:

    Dim dr = dsS.Tables("Project").NewRow
    dr("Name") = "My New Row"
    dr("Mukim") = cboMukim.SelectedValue     ' MGMT
    ... etc
    dsS.Tables(1).Rows.Add(dr)

    daSample.Update(dsS.Tables("Project"))
    dsS.Tables("Project").AcceptChanges()

    ' See Notes
    Dim rows = daSample.Fill(dsS.Tables("Project"))       ' refresh
    dsS.Tables("Project").Rows.Remove(dr)
  1. 由于Mukim CBO现在已绑定,因此可以使用将SelectedValue其存储到项目中。
  2. DataTable曲目的行是新的,添加,删除等更新后,使用AcceptChanges清除这些标志。
  3. 如果表使用AI PK,则新行最初将为0。如果刷新项目表,则将获得带有数据库提供的PK记录。这意味着将有2条“我的新行”记录,一条记录带有实际的db提供的ID,一条记录为零。删除(而不是删除!)我们添加的新行将消除这一点。

尚不清楚第3项是否适用。FloatNo可能是PK,在这种情况下,您可以跳过删除操作。同样,循环遍历“所有”行以查看是否存在“ FloatNo”,这将仅循环遍历已加载的一(1)行,因为查询包含一个LIMTI 1子句。

并非没有,但您可以使用来简化UI DataGridViewMukim等人可能是ComboBox列,而不是表单上的组合框,因此可以为您添加新行。您只需要在验证和/或他们单击保存后进行更新即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JDBC如何更新数据库?

来自分类Dev

如何使用生产数据库中的更改定期更新我的本地数据库

来自分类Dev

如何更新Derby数据库的版本

来自分类Dev

如何使用实体框架从DataGrid更新数据库

来自分类Dev

如何使用AngularJS更新/编辑数据库中的数据

来自分类Dev

如何使用LINQ更新数据库中的记录?

来自分类Dev

如何实时更新Firebase数据库?

来自分类Dev

如何使用mysql顺序更新数据库

来自分类Dev

如何使用LINQ更新数据库?Linq到SQL

来自分类Dev

如何使用AND条件更新SQLite数据库中的数据?

来自分类Dev

如何使用NHibernate更新数据库中的版本列

来自分类Dev

如何使用提交按钮更新我的Django数据库?

来自分类Dev

如何使用linq更新数据库中的数据

来自分类Dev

使用SQLAlchemy,如何仅使用json更新数据库?

来自分类Dev

使用DTO实体框架,如何更新数据库?

来自分类Dev

如何使用当前数据库时间从Java更新MongoDB?

来自分类Dev

如何使用变量更新mysql数据库?

来自分类Dev

如何使用PHP变量更新数据库?

来自分类Dev

如何使用MySQL数据库正确更新JTable数据?

来自分类Dev

如何使用NHibernate更新数据库架构

来自分类Dev

如何使用LINQ更新数据库中的记录?

来自分类Dev

交易后如何更新数据库?

来自分类Dev

如何更新实体和数据库

来自分类Dev

如何实时更新Firebase数据库?

来自分类Dev

如何部分更新数据库记录?

来自分类Dev

如何使用php更新数据库中的数据

来自分类Dev

如何更新到数据库

来自分类Dev

如何使用foreach循环更新数据库中的行?

来自分类Dev

如何通过 ODBC 使用参数更新数据库?

Related 相关文章

热门标签

归档