.Net To DB2: Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена

У меня есть сайт asp, на котором есть запрос на выбор базы данных IBM AS/400. Если запрос приложения использует только одно имя столбца из таблицы, оно возвращает данные, однако, если у меня было более одного имени столбца в запросе, оно выдает сообщение об ошибке 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt'. например

SELECT ISDUI FROM PY.F55  <--returns data
or 
SELECT ISEMAL FROM PY.F55 <--returns data

SELECT ISDUI, ISEMAL FROM PY.F55 <--error out

Вот код .net:

public int runDB(string cmd, string sub, ref DataSet ds, string type)
{
    try
    {
        if (iDB2DataAdapter1 == null)
        {
            iDB2DataAdapter1 = new iDB2DataAdapter("", new iDB2Connection(G_AS400conn));
            iDB2DataAdapter1.SelectCommand.CommandTimeout = 0;
        }

        if (iDB2DataAdapter1.SelectCommand.Connection.State != ConnectionState.Open)
            iDB2DataAdapter1.SelectCommand.Connection.Open();

        iDB2DataAdapter1.SelectCommand.CommandText = @cmd;

        if (type == "S")
        {
            ds.Clear();
            rows = iDB2DataAdapter1.Fill(ds);
        }
        else
        {
            rows = iDB2DataAdapter1.SelectCommand.ExecuteNonQuery();
        }
        return rows;
    }
    catch(Exception ex)
    {
        //log error message
    }
}

Кто-нибудь знает, почему это происходит?

Спасибо.


person sanjeev40084    schedule 03.12.2013    source источник
comment
Это System.AccessViolationException?   -  person Marco    schedule 03.12.2013
comment
Вам нужно будет опубликовать фактический код, выполняющий этот запрос. Запрос не вызывает эту проблему; что-то в вашем реальном коде есть, и мы не можем вам помочь, не видя этого.   -  person Ken White    schedule 03.12.2013
comment
@KenWhite добавил код .net. #Serv да это так.   -  person sanjeev40084    schedule 03.12.2013
comment
Сделайте мне одолжение и попробуйте следующее в Visual Studio: Options > Debugging > General > Uncheck Suppress JIT optimization on module load и снова нажмите f5. Это должен быть 7-й вариант снизу (vs2013)   -  person Marco    schedule 03.12.2013
comment
@Serv сделал это еще до того, как я опубликовал этот вопрос. Тем не менее проблема сохраняется. Спасибо.   -  person sanjeev40084    schedule 03.12.2013


Ответы (1)


Убедитесь, что используемая вами библиотека поставщика данных .NET имеет ту же производственную версию, что и система, к которой вы подключаетесь.

У нас была та же проблема с сообщением об исключении "AccessViolationException" при попытке выполнить простой запрос к iSeries. Проблема устранена путем обновления IBM.Data.DB2.iSeries.dll с версии V5R3 до той же версии целевой системы: V5R4.

person user3280724    schedule 06.02.2014