2010-09-03 18 views
1

Je suis nouveau à SQL CE. Je suis en train de programmer en ASP classique, en connectant le SQL CE en utilisant ADODB.Connection. J'ai créé la table et essaye d'insérer des données de l'ASP. J'ai essayé de 3 façons.Classic ADODB ASP avec SQL Server Compact Edition 3.5 ne fonctionne pas dans les paramètres de commande

  1. L'instruction d'insertion en ligne [par ex. INSERT INTO tblName (col1, col2) VALEURS (1,2)] (WORKED)
  2. Le a paramétré l'instruction d'insertion [par ex. INSERT INTO tblName (Col1) VALUES (?)] (WORKED). J'ai ajouté le paramètre de commande et fourni la valeur.
  3. L'instruction d'insertion paramétrés avec plus d'un param (ECHEC)

Je ne sais pas ce qui ne va pas avec de multiples paramètres. Il me renvoie l'erreur non gérée lors de l'exécution de l'instruction Cmd.Execute. "L'appel de procédure distante a échoué et n'a pas été exécuté." J'ai fait beaucoup de Google pour trouver le problème. Mais pas d'utilisation. Je n'ai pas eu d'indices.

S'il vous plaît aidez-moi à résoudre ce problème

-Ganesh

Répondre

0

avez-vous définir la propriété CommandType de l'objet Command à adCmdText?

cmd.CommandType = adCmdText 

thats comment je fais ça:

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 
0

Je voudrais compléter cette question avec mon propre exemple de code, qui échoue aussi et je suis trop cherche la même réponse. Notez que cet exemple est en C++ et donc, bien que je ne puisse pas contester directement la réponse postée par ulluoink, une réponse VB ne fonctionnera pas pour moi et (je suspecte) l'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; 
} 

J'espère que quelqu'un peut offrir une solution, ou confirmer catégoriquement qu'il ne fonctionnera pas en raison d'une limitation ADO/CE.