ADODB连接使用绑定variables将数据上传到SQL

我试图从电子表格上传一些数据到SQL数据库中。 我使用这里的代码作为一个基础,不得不做一些mods才能使它工作。

Sub newtest() Dim conn As ADODB.Connection Dim cmd As New ADODB.Command Dim cs As String Dim C1, C2, C3, C4 As String Dim RowNo As Long Dim wbk As Workbook Dim strFile As Variant Dim shtname As String ChDir "xxxxxx" strFile = Application.GetOpenFilename If strFile = False Then Exit Sub Else: End If Application.ScreenUpdating = False Set conn = New ADODB.Connection cs = "Provider=SQLOLEDB;Data Source=xxxxx;Initial Catalog=xxxx;User ID=xxx; Password=xxxxxx; " conn.ConnectionString = cs conn.Open ' *** Open workbooks first *** Set wbk = Workbooks.Open(strFile) shtname = ActiveWorkbook.Worksheets(1).Name lastrow = wbk.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1 With Sheets(shtname) cmd.ActiveConnection = conn cmd.CommandText = "insert into EcommerceXRefMapping_C_Copy values (@EquivalentPartNumber_C, @Manufacturer_C, @CatamacPartNumber_C, @Notes_C)" cmd.NamedParameters = True 'Skip the header row RowNo = 2 'Loop until empty cell in Col 1 Do Until .Cells(RowNo, 1) = "" i = i + 1 C1 = .Cells(RowNo, 1) C2 = .Cells(RowNo, 2) C3 = .Cells(RowNo, 3) C4 = .Cells(RowNo, 4) 'Generate and execute sql statement to import the excel rows to SQL Server table cmd.Parameters.Append cmd.CreateParameter("@EquivalentPartNumber_C", adVarChar, adParamInput, 256, C1) cmd.Parameters.Append cmd.CreateParameter("@Manufacturer_C", adVarChar, adParamInput, 256, C2) cmd.Parameters.Append cmd.CreateParameter("@CatamacPartNumber_C", adVarChar, adParamInput, 256, C3) cmd.Parameters.Append cmd.CreateParameter("@Notes_C", adVarChar, adParamInput, 256, C4) cmd.Execute RowNo = RowNo + 1 Loop End With wbk.Close Application.ScreenUpdating = True End Sub 

尝试执行时遇到错误

 cmd.execute 

错误消息是

 Run-time error'-2147217800 (80040e14)': Must declare the scalar variable "@EquivalentPartNumber_C". 

任何想法如何解决? 我认为variables的声明是用“@”字符完成的? 对不起,我对VBA相当陌生,请耐心等待。

谢谢!

在我看来,你为stored proceduretexttypes的命令混合符号,但…

  1. 传递参数时可以省略@
  2. 你应该在你的cmdCommandText行后面加上cmd.CommandType = adCmdText
  3. 我会改变SQL查询到:

"insert into EcommerceXRefMapping_C_Copy values (?, ?, ?, ?)"

和下一个传递参数(正确的顺序是重要的):

 cmd.Parameters(0) = c1 cmd.Parameters(1) = c2 cmd.Parameters(2) = c3 cmd.Parameters(3) = c4