VBA Excel SQL Server INSERT查询

我遇到了SQL Server INSERT查询的问题。

首先,这是我想要实现的:

我有一个Excel工作表中的产品列表,我想导出到MS SQL Server中。

这是我试过的代码:

Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim cmd As ADODB.Command Dim Client As String Set cn = New ADODB.Connection Set cmd = New ADODB.Command //Worksheets("Config").cells(1, "B").Value contains the connection string cn.Open Worksheets("Config").Cells(1, "B").Value cmd.ActiveConnection = cn cmd.CommandType = adCmdText If Worksheets("Configuration").Cells(2, "B").Value = 1 Then cmd.CommandText = "SELECT * FROM Cardex WHERE NbCardex = ?" ElseIf Worksheets("Configuration").Cells(2, "B").Value = 0 Then cmd.CommandText = "SELECT * FROM Cardex WHERE Name = ?" End If cmd.Prepared = True cmd.Parameters.Append cmd.CreateParameter("Client", adVarChar, adParamInput, 250, UCase(Worksheets("Exporter").Cells(2, "B").Value)) Set rs = cmd.Execute If Not rs.EOF Then Client = rs.Fields("NoCardex").Value End If rs.Close //The code work until it reach this point, The next lines I am not sure what is wrong //Hell I'm not even sure what i am doing. //Problem is, nothing is added into the table Dim cell As Range For Each cell In Worksheets("Exporter").Range("Liste") If cell.Row > 4 And Not cell.Value = vbNullString Then Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandType = adCmdText cmd.CommandText = "INSERT INTO NewTable(Dte, NbTr, NbClient, NbTr2, NbLine, NbProd, Desc, Qty, Cost, Prc, FlImp, FLDone) VALUES(?Date, ?Trans, ?Client, ?Projet, ?Ligne, ?Prod, ?Desc, ?Qte, ?Cout, ?Vend, ?Imp, 0)" cmd.Prepared = True cmd.Parameters.Append cmd.CreateParameter("Date", adVarChar, adParamInput, 8, Worksheets("Exporter").Cells(1, "E").Value) cmd.Parameters.Append cmd.CreateParameter("Trans", adVarChar, adParamInput, 15, Worksheets("Exporter").Cells(1, "B").Value) cmd.Parameters.Append cmd.CreateParameter("Client", adVarChar, adParamInput, 15, Client) cmd.Parameters.Append cmd.CreateParameter("Projet", adVarChar, adParamInput, 20, Worksheets("Exporter").Cells(2, "E").Value) cmd.Parameters.Append cmd.CreateParameter("Ligne", adInteger, adParamInput, , (cell.Row - 4)) cmd.Parameters.Append cmd.CreateParameter("Prod", adVarChar, adParamInput, 30, cell.Value) cmd.Parameters.Append cmd.CreateParameter("Desc", adVarChar, adParamInput, 8000, Worksheets("Exporter").Cells(cell.Row, "B").Value) cmd.Parameters.Append cmd.CreateParameter("Qte", adCurrency, adParamInput, , Worksheets("Exporter").Cells(cell.Row, "C").Value) cmd.Parameters.Append cmd.CreateParameter("Cout", adCurrency, adParamInput, , Worksheets("Exporter").Cells(cell.Row, "D").Value) cmd.Parameters.Append cmd.CreateParameter("Vend", adCurrency, adParamInput, , Worksheets("Exporter").Cells(cell.Row, "E").Value) cmd.Parameters.Append cmd.CreateParameter("Imp", adSmallInt, adParamInput, , Worksheets("Exporter").Cells(cell.Row, "F").Value) cmd.Execute() End If Next cn.Close 

我收到一个错误,说:

 Execution error '-2147217900 (80040e14)': The Scalar variable "@P1Date" must be declare. 

谁能帮我?

PS我知道VBA评论不是用“//”完成的,但“”“使得代码在这里阅读起来更容易,所以我把它们切换出来

我不认为命名参数将工作。 尝试使用:

 cmd.CommandText = "INSERT INTO NewTable(Dte, NbTr, NbClient, NbTr2, NbLine, NbProd, Desc, Qty, Cost, Prc, FlImp, FLDone) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)" 

并确保稍后添加的参数的顺序是正确的。 ;)