none
Проблемы с параметризованным запросом RRS feed

  • Общие обсуждения

  • Доброго времени суток!
    Пытаюсь из скрипта (JScript) через ADO занести данные в таблицу БД (MS Access). Делаю так:

     

    Образец кода

    var dbConnection = WScript.CreateObject("ADODB.Connection");
    dbConnection.Open("DSN=Test_DB");

     

    var dbCommand = WScript.CreateObject("ADODB.Command");
    dbCommand.ActiveConnection = dbConnection;

     

    dbCommand.CommandText = "INSERT INTO db_Events (Category) VALUES (:Category)";

     

    prmCategory = dbCommand.CreateParameter("Category", 18);
    dbCommand.Parameters.Append(prmCategory);

    prmCategory.Value = 12;

     

    dbCommand.Execute;

     

     

    При выполнении выдаётся ошибка 80040Е10 (Слишком мало параметров). Хотя параметр добавился - проверял через WScript.Echo(dbCommand.Parameters.Count). В чём проблема?

     

    P.S.: кстати, при работе над этим скриптом столкнулся с ещё одной проблемой - если при задании типа параметра попытаться указать его через константу adUnsignedSmallInt WSH ругнётся. Что надо сделать, чтобы WSH начал понимать эту и другие константы, входящие в DataTypeEnum?

    23 октября 2007 г. 4:53

Все ответы

  • Константы надо прописывать ручками, чтобы использовать потом имена. Это же скрипт все же, а не компилятор.

     

    Пр ошибку. Похоже что CreateParameter("Category", 18); должен быть расширен. Вот примеры вызовов : http://intrawestecard.com/ecc/app/authoring.asp http://www.volkswagenspares.com/Products.asp

     

    23 октября 2007 г. 5:47
    Модератор
  • Хм... странно. В MSDN написано, что у метода Create Parameter вообще все аргументы опциональные. Но тем не менее попробовал последовать вашему совету. Переделал скрипт следующим образом:

    Образец кода

    var dbConnection = WScript.CreateObject("ADODB.Connection");
    dbConnection.Open("DSN=Test_DB");

     

    var dbCommand = WScript.CreateObject("ADODB.Command");
    dbCommand.ActiveConnection = dbConnection;

     

    dbCommand.CommandText = "INSERT INTO db_Events (Category) VALUES (:Category)";

     

    prmCategory = dbCommand.CreateParameter("Category", 18, 1, 2, 0);
    dbCommand.Parameters.Append(prmCategory);

    prmCategory.Value = 12;

     

    dbCommand.Execute(lngRecordsAffected, null, 0x80);

     

    Ошибка осталась та же и в том же месте.

     

    Что характерно, в исходниках, лежащих по приведённым вами ссылкам, используются именно стандартные константы, а не их значения. Правда там исходники на VBScript. Т.е. в VBScript можно использовать стандартные константы (например, adExecuteNoRecords), а в JScript - нет?

    23 октября 2007 г. 7:05
  • Там имена констант подгружаются <!-- #include file="../include/const.asp"-->


     

    25 октября 2007 г. 9:03
    Модератор
  •  sie написано:

    Там имена констант подгружаются <!-- #include file="../include/const.asp"-->


     

    Где этот файл можно взять?

    26 октября 2007 г. 4:25
  • В Интернете

    Иногда такие файлы встречаются в пакетах для разработчиков.
    26 октября 2007 г. 4:55
    Модератор
  •  sie написано:

    В Интернете

    Искал. Не нашёл. Если не затруднит, поделитесь ссылкой пожалуйста. Или залейте куда-нибудь, если есть такое сокровище в наличии.

    2 ноября 2007 г. 8:40