我有一个使用以下代码运行的方法:
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提供程序,String格式,Object [] args) 在System.String.Format(IFormatProvider提供程序,String格式,Object [] args) at System.String.Format(String format,Object arg0,Object arg1,Object arg2) at MyCompany.MyClient.MySoftware.Logger.WriteToDb()
我真的能看到这个错误的来源。据我所知,我没有在该方法中使用任何集合。我还必须认为这种方法是多线程的,但我再也想不到可能产生的影响。
谢谢!
答案 0 :(得分:8)
您的上一个格式编号为{3}
,而不是{2}
答案 1 :(得分: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));
答案 2 :(得分:1)
您使用{3}
代替{2}
:
Console.WriteLine(String.Format("{0} Error writing log info: {1} \n {2}", DateTime.Now.ToString(), e.Message, e.StackTrace));
答案 3 :(得分:1)
据我所知,我没有在该方法中使用任何集合。
System.String.Format(String format, Object arg0, Object arg1, Object arg2)
调用System.String.Format(IFormatProvider provider, String format, Object[] args)
,以便Collection
进入堆栈。
正如其他人所解释的那样,您使用的是{3}
,但数组只有三个元素,索引为0
到2