我是vb.net
和stackoverflow的新手。我目前正在一个小项目中,应用程序将获取一个excel文件并将其上传到访问数据库后端。
目前我已设法将我想要的excel文件导入数据表(dt
),但遇到问题,然后更新后端访问数据库。
我想我的问题在于传递的参数 - 我继续得到' 多步OLE DB操作产生的错误'并尝试设置数据类型。任何帮助将不胜感激
Dim con As New OleDb.OleDbConnection(Connect)
Dim Update As New OleDb.OleDbCommand("Update Queries SET SubjStatus=@P1, Status=@P2, Age=@P3, ClosedDate=@P4, ClosedTime=@P5, ClosedBy=@P6, ClosedByRole=@P7 " & _
"WHERE Study=@P8 AND RVLID=@P9 AND VisitName=@P10 AND FormName=@P11 AND PageNo=@P12 AND FieldName=@P13 AND Description=@P14" & _
" AND CreateDate=@P15 AND CreateTime=@P16 AND CreatedBy=@P17", con)
'Get values from excel - datatable
With Update.Parameters
.AddWithValue("@P1", dt.Columns("Subject Status"))
.AddWithValue("@P2", dt.Columns("Query Status"))
.AddWithValue("@P3", dt.Columns("Query Age (days)"))
.AddWithValue("@P4", dt.Columns("Query Closed Date"))
.AddWithValue("@P5", dt.Columns("Query Closed Time"))
.AddWithValue("@P6", dt.Columns("Query Closed By"))
.AddWithValue("@P7", dt.Columns("Query Closed By Role"))
.AddWithValue("@P8", dt.Columns("Protocol Number"))
.AddWithValue("@P9", dt.Columns("Screening Number"))
.AddWithValue("@P10", dt.Columns("Visit Name"))
.AddWithValue("@P11", dt.Columns("Form Name"))
.AddWithValue("@P12", dt.Columns("Page Number"))
.AddWithValue("@P13", dt.Columns("Field Name"))
.AddWithValue("@P14", dt.Columns("Query Text"))
.AddWithValue("@P15", dt.Columns("Query Creation Date (UTC)"))
.AddWithValue("@P16", dt.Columns("Query Creation Time (UTC)"))
.AddWithValue("@P17", dt.Columns("Query Created By"))
End With
'Execute SQL Command
con.Open()
Update.ExecuteNonQuery()
答案 0 :(得分:0)
我设法使用这两个链接的组合获得了一个不错的解决方案
我将参数定义如下
.Add("@P6", OleDb.OleDbType.LongVarChar, 255, "Page Number")
.Add("@P7", OleDb.OleDbType.LongVarChar, 255, "Field Name")
我需要确保datatable(dt)中的行设置为认为发生了更改。
For Each row As DataRow In dt.Rows
If row.RowState = DataRowState.Added Or DataRowState.Unchanged Then
row.SetAdded()
End If
Next
然后我可以使用数据适配器更新(定义更新,插入命令后)
da.update(dt)
如果有更好的方法,请有人告诉我。