我试图将string.format中的列表作为参数传递给SQL语句,但是我收到以下错误:
索引(从零开始)必须大于或等于零且小于参数列表的大小。
我知道当我列出每个列表成员作为参数时,我可以让它工作,但我想知道是否有快捷方式,所以我只能使用列表对象作为唯一的参数。
谢谢!
Public Sub updateSecurityMasterTable(ByVal params As Dictionary(Of String, String))
Dim updateList As New List(Of String)
Try
updateList.Add(params.Item("ticker"))
updateList.Add(String.Empty)
updateList.Add(params.Item("asset_class"))
updateList.Add(params.Item("sub_class"))
updateList.Add(params.Item("asset_type"))
updateList.Add(params.Item("current_price"))
updateList.Add(params.Item("market_cap"))
updateList.Add(params.Item("dividend_yield"))
updateList.Add(params.Item("pe_ratio"))
updateList.Add(params.Item("eps"))
updateList.Add(params.Item("sector"))
Catch ex As Exception
Throw ex
End Try
Dim strSql As New StringBuilder
strSql.Append("INSERT INTO SecurityMaster ")
strSql.Append("(ticker, cusip, asset_class, sub_class, asset_type, current_price, market_cap, dividend_yield, pe_ratio, eps, sector) ")
strSql.Append(String.Format("VALUES (N'{0}', N'{1}', N'{2}', N'{3}', N'{4}', N'{5}', N'{6}', N'{7}', N'{8}', N'{9}', N'{10}')", updateList))
Try
If checkConnection() Then
'Do Nothing
Else
Me.createConnection()
End If
Using cmdExe As New SqlCeCommand(strSql.ToString(), conn)
cmdExe.ExecuteNonQuery()
End Using
Catch ex As Exception
Throw ex
End Try
End Sub
答案 0 :(得分:4)
尝试:
String.Format("VALUES (N'{0}', N'{1}', N'{2}', N'{3}', N'{4}', N'{5}', N'{6}', N'{7}', N'{8}', N'{9}', N'{10}')", updateList.ToArray)