1

我有一个使用以下代码运行的方法:

private void WriteToDb()
{
    using (SqlConnection dbConnection = new SqlConnection(_conStr))
    {
        dbConnection.Open();
        using (SqlBulkCopy sbc = new SqlBulkCopy(_conStr))
        {
            sbc.DestinationTableName = "tblLog";
            try
            {
                sbc.WriteToServer(_tblLog);
            }
            catch (Exception e)
            {
                Console.WriteLine(String.Format("{0} Error writing log info: {1} \n {3}", DateTime.Now.ToString(), e.Message, e.StackTrace));
            }
        }
    }

    _tblLog.Rows.Clear();
}

我从String.Format()具有以下堆栈跟踪的方法收到异常:

未处理的异常:System.FormatException:索引(从零开始)必须大于或等于零且小于参数列表的大小。在 System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args) 在 System.String.Format(IFormatProvider provider, String format, Object[] args) 在 System.String.Format(String format, Object args) , 对象 arg1, 对象 arg2) 在 MyCompany.MyClient.MySoftware.Logger.WriteToDb()

我真的可以看到这个错误的来源。据我所知,我没有在该方法中使用任何集合。我还不得不承认这种方法是多线程的,但我还是想不出可能的影响。

谢谢!

4

4 回答 4

8

您的最后一个格式编号{3}{2}

于 2012-11-02T15:12:59.267 回答
4
Console.WriteLine(String.Format("{0} Error writing log info: {1} \n {3}", DateTime.Now.ToString(), e.Message, e.StackTrace));

应该

Console.WriteLine(String.Format("{0} Error writing log info: {1} \n {2}", DateTime.Now.ToString(), e.Message, e.StackTrace));
于 2012-11-02T15:13:39.193 回答
1

据我所知,我没有在该方法中使用任何集合。

System.String.Format(String format, Object arg0, Object arg1, Object arg2)调用System.String.Format(IFormatProvider provider, String format, Object[] args)所以这就是Collection进入堆栈的地方。

正如其他人解释的那样,您正在使用{3}但数组只有三个元素,在索引02

于 2012-11-02T15:17:07.083 回答
1

您正在使用{3}而不是{2}

Console.WriteLine(String.Format("{0} Error writing log info: {1} \n {2}", DateTime.Now.ToString(), e.Message, e.StackTrace));
于 2012-11-02T15:13:29.050 回答