【发布时间】:2015-12-23 17:58:08
【问题描述】:
我正在使用下面的代码插入或更新使用来自DataTable 的值的MySql 表
Function DB_Multi_Ins_Or_Upd_From_DT(ByVal dt As DataTable, ByVal DestTbl$) As Integer
Using SQLConnection As New MySqlConnection(CnStr)
Using sqlCommand As New MySqlCommand()
Dim CmdTxt$ = "INSERT INTO " & DestTbl & " ("
For Each Col As DataColumn In dt.Columns
CmdTxt &= Col.ColumnName & ", "
Next
CmdTxt = CmdTxt.Substring(0, CmdTxt.Length - 2) & ") VALUES ("
For x As Integer = 0 To dt.Rows.Count - 1
For xx As Integer = 0 To dt.Columns.Count - 1
CmdTxt &= "@" & "R" & x.ToString & "C" & xx.ToString & ", "
sqlCommand.Parameters.AddWithValue _
("@" & "R" & x.ToString & "C" & xx.ToString, dt.Rows(x)(xx))
Next xx
CmdTxt = CmdTxt.Substring(0, CmdTxt.Length - 2) & "), ("
Next x
CmdTxt = CmdTxt.Substring(0, CmdTxt.Length - 3)
CmdTxt &= " ON DUPLICATE KEY UPDATE "
For Each Col As DataColumn In dt.Columns
CmdTxt &= Col.ColumnName & "=VALUES(" & Col.ColumnName & "), "
Next
CmdTxt = CmdTxt.Substring(0, CmdTxt.Length - 2)
With sqlCommand
.CommandText = CmdTxt
.Connection = SQLConnection
.CommandType = CommandType.Text
End With
Try
SQLConnection.Open()
Dim AffRows% = sqlCommand.ExecuteNonQuery()
Return AffRows
Catch ex As MySqlException
Return -1
Finally
SQLConnection.Close()
End Try
End Using
End Using
End Function
恰好代码更新了 1 行但返回 2。
编辑:似乎只在update 上返回错误结果,而在insert 上返回正确数量的受影响行
怎么了?如何修复并获得正确的受影响行数?
编辑:测试我需要的代码:
1) 导入 MySql.Data.MySqlClient
2) 给
cnstr赋值 "datasource=" + Server_Name + ";username= " + UserDB + ";password=" + 密码 + ";database=" + Database_Name + ""3) 创建一个
DataTable,其列名类似于数据库表的字段4) 调用传递DataTable和表名的函数 在数据库上
【问题讨论】:
-
那你能显示你的更新代码吗?
-
@Steve 你是什么意思?要更新,我使用发布的函数将 DataTable 传递给它。这是我的代码。当一行已经存在时,它将被更新
-
抱歉,错过了“ON DUPLICATE KEY UPDATE”,请参阅下面 MySQL 文档中的答案。