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プロバイダー、文字列形式、Object [] args)でSystem.String.Format(IFormatProviderプロバイダー、文字列形式、Object [] args)でSystem.String.Format(文字列形式、オブジェクトarg0 、Object arg1、Object arg2)at 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

{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 に答える
1

私が見る限り、私はそのメソッドでコレクションを使用していません。

System.String.Format(String format, Object arg0, Object arg1, Object arg2)がスタックに入るSystem.String.Format(IFormatProvider provider, String format, Object[] args)場所を呼び出します。Collection

他の人が説明したように、あなたは使用しています{3}が、配列にはインデックス0から3つの要素しかありません2

于 2012-11-02T15:17:07.083 に答える