una tipos son script objetos los ejemplos ejemplo datos cuales crear como codigo sql-server-2005 visual-c++ mfc

sql server 2005 - tipos - Cuál es la forma más sencilla de ejecutar una consulta en Visual C++



linq to sql c# ejemplos (4)

Con MFC use CDatabase y ExecuteSQL si va a través de una conexión ODBC.

CDatabase db(ODBCConnectionString); db.Open(); db.ExecuteSQL(blah); db.Close();

Estoy usando Visual C ++ 2005 y me gustaría saber la forma más sencilla de conectarse a un servidor MS SQL y ejecutar una consulta.

Estoy buscando algo tan simple como la clase SqlCommand de ADO.NET con ExecuteNonQuery (), ExecuteScalar () y ExecuteReader ().

Suspiro ofreció una respuesta utilizando CDatabase y ODBC.

¿Alguien puede demostrar cómo se haría usando plantillas de consumidor de ATL para OleDb?

Además, ¿qué hay de devolver un valor escalar de la consulta?


Pruebe la biblioteca de Microsoft Enterprise. Una versión debe estar disponible aquí para C ++. La clase SQlHelper implica los métodos que está buscando desde los antiguos días de ADO. Si puede tener en sus manos la versión 2, puede incluso usar la misma sintaxis.


Lo usé recientemente:

#include <ole2.h> #import "msado15.dll" no_namespace rename("EOF", "EndOfFile") #include <oledb.h> void CMyDlg::OnBnClickedButton1() { if ( FAILED(::CoInitialize(NULL)) ) return; _RecordsetPtr pRs = NULL; //use your connection string here _bstr_t strCnn(_T("Provider=SQLNCLI;Server=.//SQLExpress;AttachDBFilename=C://Program Files//Microsoft SQL Server//MSSQL.1//MSSQL//Data//db//db.mdf;Database=mydb;Trusted_Connection=Yes;MARS Connection=true")); _bstr_t a_Select(_T("select * from Table")); try { pRs.CreateInstance(__uuidof(Recordset)); pRs->Open(a_Select.AllocSysString(), strCnn.AllocSysString(), adOpenStatic, adLockReadOnly, adCmdText); //obtain entire restult as comma separated text: CString text((LPCWSTR)pRs->GetString(adClipString, -1, _T(","), _T(""), _T("NULL"))); //iterate thru recordset: long count = pRs->GetRecordCount(); COleVariant var; CString strColumn1; CString column1(_T("column1_name")); for(int i = 1; i <= count; i++) { var = pRs->GetFields()->GetItem(column1.AllocSysString())->GetValue(); strColumn1 = (LPCTSTR)_bstr_t(var); } } catch(_com_error& e) { CString err((LPCTSTR)(e.Description())); MessageBox(err, _T("error"), MB_OK); _asm nop; // } // Clean up objects before exit. if (pRs) if (pRs->State == adStateOpen) pRs->Close(); ::CoUninitialize(); }


Debería poder usar OTL para esto. Es más o menos:

#define OTL_ODBC_MSSQL_2008 // Compile OTL 4/ODBC, MS SQL 2008 //#define OTL_ODBC // Compile OTL 4/ODBC. Uncomment this when used with MS SQL 7.0/ 2000 #include <otlv4.h> // include the OTL 4.0 header file #include <stdio> int main() { otl_connect db; // connect object otl_connect::otl_initialize(); // initialize ODBC environment try { int myint; db.rlogon("scott/tiger@mssql2008"); // connect to the database otl_stream select(10, "select someint from test_tab", db); while (!select.eof()) { select >> myint; std::cout<<"myint = " << myint << std::endl; } } catch(otl_exception& p) { std::cerr << p.code << std::endl; // print out error code std::cerr << p.sqlstate << std::endl; // print out error SQLSTATE std::cerr << p.msg << std::endl; // print out error message std::cerr << p.stm_text << std::endl; // print out SQL that caused the error std::cerr << p.var_info << std::endl; // print out the variable that caused the error } db.logoff(); // disconnect from the database return 0; }

Lo bueno de OTL, IMO, es que es muy rápido, portátil (lo he usado en numerosas plataformas), y se conecta a una gran cantidad de bases de datos diferentes.