none
Проблемы при интенсивной работе с vfpoledb из ADO.NET RRS feed

  • Вопрос

  • При многократном циклическом вызове процедуры (порядка 12000 последовательных обращений) обновления DBF таблицы вызывается исключение вида SQL: Column 'Q314P1' is not found (при каждом прогоне выдается различное наименование столбца, вида QxPy, где x,y - некоторые числа). Ошибка возникает в произвольных местах.

    Среда разработки visual studio 2010, .NET Framework 4 Client Profile, строка подключения Provider=VFPOLEDB.1;Data Source=i:\

    В результате поиска в интернете нашел http://connect.microsoft.com/VisualStudio/feedback/details/217718/vfpoledb-provider-cannot-be-used-under-net-web-site-on-high-traffic и http://www.universalthread.com/DataEntryThreadView.aspx?ID=1158763. На  .NET 1.1 проблемы, видимо, не существовало.

    Совершенно не понятно, как избежать возникновение этого исключения из ADO.NET. Добавление задержки между вызовами метода эффекта не дало.

     

    Листинг метода (часть параметров удалил, из-за ограничений форума)

    private

     

    OleDbCommand

    _fpdCommand;

     

    private int UpdatePlatel(SqlCeDataReader

    platelRow)

    {

     

    string commandSql =

    @"UPDATE platel

    SET cntrct_id = ?, entity_id = ?, trnspct_id = ?, grprprt_1 = ?, d_zakl_prv = ?, d_zakl = ?,

    tpcntrt_id = ?, fmcntrt_id = ?, completed = ?, with_diff = ?, concluded = ?, beg_date = ?,

    discord = ?, form_dog = ?, nmentt_idc = ?, tpname_id = ?, naim_p = ?, fullnaim_p = ?,

    nmcnsn_idc = ?, addr_cnsn = ?, inn_cnsn = ?, cpp_cnsn = ?, ogrn_cnsn = ?, nmbuyr_idc = ?,

    addr_buyr = ?, inn_buyr = ?, cpp_buyr = ?, ogrn_buyr = ?, rasch = ?, bank = ?, addforbnkd = ?,

    rcpacc_id = ?, adres = ?, phone = ?, phone_2 = ?, fax = ?, type_plt = ?, bank_our = ?, rsc_our = ?,

    del_dog = ?, nom_cat = ?, nomctrl = ?, inn = ?, cpp = ?, ogrn = ?, hook = ?, get_pok = ?, ocpo = ?,

    soogu = ?, ocopf = ?, ocfs = ?, oconch = ?, soc_stat = ?, budget = ?, operator = ?, date = ?, time = ?,

    otrasl = ?, abn_lim = ?, cnn_lim = ?, rgm_day = ?, reg_dog = ?, post = ?, man = ?, lstnm_base = ?,

    lstnm_nom = ?, lstnm_gen = ?, lstnm_dat = ?, frstnm_id = ?, mddlnm_id = ?, next_nmabn = ?,

    lock_nmabn = ?, date_nmabn = ?, time_nmabn = ?, end_month = ?, bankrupt = ?,

    prcntprclc = ?, sumprclc = ?, doc_id_pay = ?, doc_id_bnk = ?, clss_pwrct = ?, advnc_bnkd = ?,

    notprn_acc = ?, pwspplr_id = ?, ntrgltrff = ?, rptctg_id = ?, dubl_dog = ? where nomdog=?"

     

    ;

     

    //OleDbCommand fpdCommand = new OleDbCommand(commandSql, FPDConn);

    _fpdCommand.CommandText = commandSql;

    _fpdCommand.CommandType =

    CommandType

    .Text;

    _fpdCommand.Parameters.Clear();

    _fpdCommand.Parameters.AddWithValue(

    "@cntrct_id", platelRow["cntrct_id"

    ]);

    _fpdCommand.Parameters.AddWithValue(

    "@entity_id", platelRow["entity_id"

    ]);

    _fpdCommand.Parameters.AddWithValue(

    "@trnspct_id", platelRow["trnspct_id"

    ]);

    _fpdCommand.Parameters.AddWithValue(

    "@grprprt_1", platelRow["grprprt_1"

    ]);

    _fpdCommand.Parameters.AddWithValue(

    "@d_zakl_prv", platelRow["d_zakl_prv"

    ]);

    _fpdCommand.Parameters.AddWithValue(

    "@d_zakl", platelRow["d_zakl"

    ]);

    _fpdCommand.Parameters.AddWithValue(

    "@tpcntrt_id", platelRow["tpcntrt_id"

    ]);

     

    int

    _cnt = 0;

     

    try

    {

    _cnt = _fpdCommand.ExecuteNonQuery();

    }

     

    catch (Exception

    )

    {

    }

     

    Thread

    .Sleep(1);

     

    return

    _cnt;

    }

     

    • Перемещено Abolmasov Dmitry 11 января 2012 г. 10:45 (От:Настольные ПК)
    30 декабря 2011 г. 5:28

Ответы

  • Michel Fournier had to switch to SQL Server because of this problem. He discussed this problem a lot couple of years back and I know there was no solution back then. I suspect there is no solution still - VFPOleDB is not robust enough and I don't think MS spends time on it.
    For every expert, there is an equal and opposite expert. - Becker's Law


    My blog
    • Помечено в качестве ответа Abolmasov Dmitry 13 января 2012 г. 8:01
    12 января 2012 г. 2:15

Все ответы

  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    11 января 2012 г. 7:49
  • Michel Fournier had to switch to SQL Server because of this problem. He discussed this problem a lot couple of years back and I know there was no solution back then. I suspect there is no solution still - VFPOleDB is not robust enough and I don't think MS spends time on it.
    For every expert, there is an equal and opposite expert. - Becker's Law


    My blog
    • Помечено в качестве ответа Abolmasov Dmitry 13 января 2012 г. 8:01
    12 января 2012 г. 2:15