Я хотел бы дополнить этот вопрос своим собственным примером кода, который также не работает, и поэтому я тоже ищу тот же ответ. Обратите внимание, что этот пример написан на 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.