我试图从电子表格上传一些数据到SQL数据库。我使用here中的代码作为基础,必须制作一些mod才能使其正常工作。
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".
任何想法如何解决?我认为变量的声明是用" @"字符?对不起,我对VBA很新,所以请耐心等待。
谢谢!
答案 0 :(得分:3)
在我看来,你为stored procedure
和text
类型的命令混合了符号,但......
@
cmd.CommandType = adCmdText
行cmdCommandText
"insert into EcommerceXRefMapping_C_Copy values (?, ?, ?, ?)"
并以这种方式传递下一个参数(正确的顺序很重要):
cmd.Parameters(0) = c1
cmd.Parameters(1) = c2
cmd.Parameters(2) = c3
cmd.Parameters(3) = c4