Как я использую хранимую процедуру в log4net ADONetAppender?

Что не так

В вашем коде вы ссылаетесь на R[Tam + 1], которая является строкой, сообщающей об ошибке. Ранее вы определяете Tam как равное 3, а R как равное [Tam + 2], что создает список, содержащий один элемент, Tam + 2 или, поскольку вы ранее определили Tam, 5. В других словами, R это список, который содержит один элемент, 5.

Далее, вы пытаетесь сослаться на определенный элемент в R - Tam + 1, или 4. У вас должно быть пять элементов. в R для существования R[4], поэтому он возвращает ошибку IndexError, потому что указанный вами индекс не приводит к правильному элементу.

Возможные исправления

Чтобы это исправить, мы должны точно знать, что вы хотите здесь сделать. Если вы хотите добавить элемент Tam + 1 в список, вы должны сделать R.append(Tam + 1). Если вы хотите установить четвертый элемент в списке равным нулю, вы должны сделать R[Tam + 1] = 0; тем не менее, в списке нет четвертого элемента, который можно было бы установить равным нулю.

Некоторые стилистические заметки

Они не нужны для исправления вашей программы, но вы можете прочитать PEP8, руководство по стилю для Python. В частности, я отмечаю, что вы импортируете пакет, который вам не нужен (хотя, конечно, он может понадобиться вам позже в вашей программе; я не знаю), вы определяете переменные с однобуквенными заглавными именами, когда в идеале вы бы использовали более длинное и описательное имя. У вас также есть имена, такие как Rf, когда в идеале это будет r_f (и более описательный). Вы также можете добавить комментарии к своему коду, чтобы объяснить, что происходит. Эти изменения помогут другим и вам самим прочитать ваш код и найти проблемы или добавить его в код.

9
задан Philipp M 4 November 2013 в 04:34
поделиться

2 ответа

Благодаря бдительному DBA мы решили проблему.

Отметьте размер "@Message" параметра. log4net берет предположение в том, как преобразовать тип и (я думаю), преобразование его к nvarchar даже при том, что столбец является varchar. Это - грандиозное предприятие, потому что nvarchar имеет макс. размер 4 000, в то время как varchar имеет макс. размер 8 000.

DBA видел ошибки, как описано в этой статье KB: http://support.microsoft.com/kb/827366

Я изменил размер на 4 000, и все работает без помех.

Надо надеяться, это поможет кому-то еще избежать той же проблемы.

Удачи!

4
ответ дан 3 November 2019 в 05:39
поделиться

</configSections>
<log4net>

    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">

        <bufferSize value="1"/>

        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

        <connectionString value="Data Source=yourservername;initial Catalog=Databasename;User ID=sa;Password=xyz;"/>



        <commandText value="INSERT INTO Log4Net ([Date], [Thread], [Level], [Logger], [Message], 
               [Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"/>

        <parameter>

            <parameterName value="@log_date"/>

            <dbType value="DateTime"/>

            <layout type="log4net.Layout.RawTimeStampLayout"/>

        </parameter>

        <parameter>

            <parameterName value="@thread"/>

            <dbType value="String"/>

            <size value="255"/>

            <layout type="log4net.Layout.PatternLayout">

                <conversionPattern value="%thread ip=%property{ip}"/>

            </layout>

        </parameter>

        <parameter>

            <parameterName value="@log_level"/>

            <dbType value="String"/>

            <size value="50"/>

            <layout type="log4net.Layout.PatternLayout">

                <conversionPattern value="%level"/>

            </layout>

        </parameter>

        <parameter>

            <parameterName value="@logger"/>

            <dbType value="String"/>

            <size value="255"/>

            <layout type="log4net.Layout.PatternLayout">

                <conversionPattern value="%logger"/>

            </layout>

        </parameter>

        <parameter>

            <parameterName value="@message"/>

            <dbType value="String"/>

            <size value="4000"/>

            <layout type="log4net.Layout.PatternLayout">

                <conversionPattern value="%message"/>

            </layout>
-3
ответ дан 3 November 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: