插入时出错...索引(从零开始)必须大于或等于零且小于参数列表的大小

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,您可能会有更好的运气。

以上是关于插入时出错...索引(从零开始)必须大于或等于零且小于参数列表的大小的主要内容,如果未能解决你的问题,请参考以下文章

索引(从零开始)必须大于或等于零且小于参数列表的大小

索引(从零开始)必须大于或等于零且小于参数列表的大小。 - 字符串.格式

System.FormatException:索引(从零开始)必须大于或等于零且小于参数列表的大小

索引(从零开始)必须大于或等于零?

索引(从零开始)必须大于或等于零单位

随机项目生成器错误[重复]