2012-02-10 37 views
1

我想傳遞的String.Format作爲參數傳遞到SQL語句的列表,但我得到了下面的錯誤說法:插入列表中的對象作爲的String.Format

索引(從零開始)必須大於大於或等於零且小於參數列表的大小。

我知道,當我列出每個單獨的列表成員作爲參數,我可以得到它的工作,但我想知道是否有一個快捷方式,所以我可以只使用列表對象作爲唯一的參數。

謝謝!

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 

回答

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) 
+0

感謝皮特!這工作。 – 2012-02-10 04:20:30

+0

@Pete幫助我解決了一些稍微不同的問題,但是相關:)。 TA! – 2013-02-11 17:21:56