插入时出错...索引(从零开始)必须大于或等于零且小于参数列表的大小
Posted
技术标签:
【中文标题】插入时出错...索引(从零开始)必须大于或等于零且小于参数列表的大小【英文标题】:Error upon insertion ...Index (zero based) must be greater than or equal to zero and less than the size of the argument list 【发布时间】:2013-11-10 07:09:59 【问题描述】:我得到一个“索引(从零开始)必须大于或等于零且小于参数列表的大小。”以下Insert命令出错(见insert sql命令)..我已经更正了参数列表,我指的是正确的表....
Dim dtResultParentGUID As DataTable
'Get the GUID for the parent ObsSetCode
Dim sbSql As New System.Text.StringBuilder()
sbSql.Append("DECLARE @parentObsSetGUID uniqueidentifier ")
sbSql.Append("SELECT GUID ")
sbSql.Append("FROM 0 ")
sbSql.Append("WHERE 1 = '2';")
dtResultParentGUID = AicDatabase.ExecuteSqlReturnTable(String.Format(sbSql.ToString(), aicObsSet, pTablePrimaryKeyName, parentObsSetCode))
Dim dtResultChildGUID As DataTable
'Get the GUID for the child ObsSetCode
Dim sbSql1 As New System.Text.StringBuilder()
sbSql1.Append("DECLARE @childObsSetGUID uniqueidentifier ")
sbSql1.Append("SELECT GUID ")
sbSql1.Append("FROM 0 ")
sbSql1.Append("WHERE 1 = '2';")
dtResultChildGUID = AicDatabase.ExecuteSqlReturnTable(String.Format(sbSql.ToString(), aicObsSet, pTablePrimaryKeyName, strInsert))
strSql.Append("DECLARE @cur_date_time datetime; ")
strSql.Append("SELECT @cur_date_time = getdate(); ")
strSql.Append("WAITFOR DELAY '00:00:00.100'; ")
strSql.Append("INSERT INTO aic_obs_set_obs_set_obs_item_xref_chg (ModifiedBy, ContentGUID, ParentObsSetGUID, ParentObsSetCode,")
strSql.Append("ChildObsSetGUID, ChildObsSetCode, ChildObsItemGUID, ChildObsItemCode, RationaleText, RationaleFreeText")
strSql.Append(String.Format("SELECT '0', '1', '2', '3','4', '5','6', '7','8', '9',"))
strSql.Append("'ExcelSheet', 'GUID', dtResultParentGUID(0), parentObsSetCode, dtResultChildGUID(0), strInsert,")
strSql.Append("'','', rationaleText, rationaleType")
latLog.Operation = sbSql.ToString
latLog.WriteLog()
latLog.Operation = sbSql1.ToString
latLog.WriteLog()
【问题讨论】:
【参考方案1】:你正在做一个String.Format
,但没有提供任何值来替换它:
String.Format("SELECT '0', '1', '2', '3','4', '5','6', '7','8', '9',"))
(这是最后一栏第二个Append
调用,位于代码底部)
您希望在这些占位符中加入什么?
那么基于 cmets,它应该是这样的:
strSql.Append(String.Format("SELECT '0', '1', '2', '3','4', '5','6', '7','8', '9'," _
"ExcelSheet", "GUID", dtResultParentGUID(0), parentObsSetCode, dtResultChildGUID(0), strInsert, _
"","", rationaleText, rationaleType)
【讨论】:
我希望进入占位符的值位于 String.Format 后面的 2 行中。这些是值:'ExcelSheet'、'GUID'、dtResultParentGUID(0) , parentObsSetCode, dtResultChildGUID(0), strInsert,'','',rationaleText,rationaleType @Code12 - 我已经尝试过了 - 您似乎将用于 SQL 的内容与用于 .NET 的内容混为一谈。如果您使用参数而不是使用字符串格式来构建 SQL,您可能会有更好的运气。以上是关于插入时出错...索引(从零开始)必须大于或等于零且小于参数列表的大小的主要内容,如果未能解决你的问题,请参考以下文章
索引(从零开始)必须大于或等于零且小于参数列表的大小。 - 字符串.格式