参数 - 多步OLE DB操作生成错误

时间:2015-07-07 11:23:51

标签: vb.net excel parameters oledb

我是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()

1 个答案:

答案 0 :(得分:0)

我设法使用这两个链接的组合获得了一个不错的解决方案

  1. Update DataAdapter1
  2. Update DataAdapter2
  3. 我将参数定义如下

    .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)

    如果有更好的方法,请有人告诉我。