Классический ASP ADODB с SQL Server Compact Edition 3.5 не работает в параметрах команд - PullRequest
1 голос
/ 03 сентября 2010

Я новичок в SQL CE.Я программирую на Classic ASP, подключая SQL CE с помощью ADODB.Connection.Я создал таблицу и пытаюсь вставить данные из ASP.Я пробовал тремя способами.

  1. Оператор вставки inline [например, INSERT INTO tblName (col1, col2) VALUES (1,2)] (WORKED)
  2. Параметризация оператор вставки [например, INSERT INTO tblName (Col1) VALUES (?)] (WORKED).Я добавил параметр команды и предоставил значение.
  3. Параметризованный оператор вставки с более чем одним параметром (FAILED)

Я не знаю, что не так с множественнымпараметры.Это выдает мне необработанную ошибку при выполнении оператора Cmd.Execute.

«Удаленный вызов процедуры не выполнен и не выполнен.»

Я сделал много Google, чтобывыяснить проблему.Но бесполезно.Я не получил никаких подсказок.

Пожалуйста, помогите мне решить эту проблему

-Ганеш

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

Я хотел бы дополнить этот вопрос своим собственным примером кода, который также не работает, и поэтому я тоже ищу тот же ответ. Обратите внимание, что этот пример написан на C ++, и поэтому, хотя я не могу напрямую оспорить ответ, опубликованный ulluoink, ответ VB не будет работать для меня и (я подозреваю) OP.

// AdoCe.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>

#include <ole2.h>
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")

#include <string>

int _tmain(int argc, _TCHAR* argv[])
{
    ::CoInitializeEx(NULL, COINIT_MULTITHREADED);

    _ConnectionPtr pConnection = NULL;
    _CommandPtr pCommand = NULL;
    std::string dbConnStr, sql;

    dbConnStr = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=F:\\sample.sdf;Persist Security Info=False;";

    // this sql insert works
    // sql = "INSERT INTO foo (c1) VALUES (?)";
    // this sql insert fails
    sql = "INSERT INTO foo (c1,c2) VALUES (?,?)";

    try {
        pConnection.CreateInstance(__uuidof(Connection));
        HRESULT hr = pConnection->Open(dbConnStr.c_str(), "", "", adConnectUnspecified);

        pCommand.CreateInstance(__uuidof(Command));
        pCommand->ActiveConnection = _ConnectionPtr(pConnection);
        pCommand->CommandType = adCmdText;
        pCommand->CommandText = sql.c_str();

        _ParameterPtr p1 = NULL;
        // !!! assume that our parameters can always be represented as strings
        // !!! also, CE requires adVarWChar or it generates unknown data type error
        p1 = pCommand->CreateParameter("@p1", adVarWChar, adParamInput, 100, "1");
        pCommand->Parameters->Append(p1);


        _ParameterPtr p2 = NULL, p3 = NULL, p4 = NULL, p5 = NULL;
        p2 = pCommand->CreateParameter("@p2", adVarWChar, adParamInput, 100, "cc1");
        pCommand->Parameters->Append( p2 );
        //p3 = pCommand->CreateParameter("@p3", adVarWChar, adParamInput, 128, "cc2");
        //pCommand->Parameters->Append( p3 );
        //p4 = pCommand->CreateParameter("@p4", adVarWChar, adParamInput, 128, "cc3");
        //pCommand->Parameters->Append( p4 );
        //p5 = pCommand->CreateParameter("@p5", adVarWChar, adParamInput, 128, "cc4");
        //pCommand->Parameters->Append( p5 );

        pCommand->Execute(NULL, NULL, adExecuteNoRecords);

        pConnection->Close();
    }

    catch(_com_error& e)
    {
        _bstr_t e1 = e.Description();
        const TCHAR* e2 = e.ErrorMessage();
        IErrorInfo* e3 = e.ErrorInfo();
    }

    ::CoUninitialize();
    return 0;
}

Я надеюсь, что кто-то может предложить решение или категорически подтвердить, что оно просто не будет работать из-за некоторых ограничений ADO / CE.

0 голосов
/ 23 сентября 2010

Вы установили для свойства CommandType объекта Command значение adCmdText?

cmd.CommandType = adCmdText

Вот как я могу это сделать:

dim sql : sql = "insert into tbl(fld1, fld2) values(?, ?)"
dim cmd : set cmd = server.createObject("ADODB.Command")
cmd.ActiveConnection = adodbConnection
cmd.CommandType = adCmdText

set param = cmd.CreateParameter("fld1", adVarWChar, , 20, "value1")
cmd.Parameters.Append param
set param = cmd.CreateParameter("fld2", adVarWChar, , 20, "value2")
cmd.Parameters.Append param

cmd.CommandText = sql
cmd.Execute
...