求C++连接SQL Server的代码,不是VC。 CSDN的各位大虾们帮帮小弟。小弟连了1上午了。网上的资料不是很全阿,至少我找到的是这样的。我just需要C++连接SQL Server的代码,不是VC。呵呵,静候中阿。不管怎么样,进来看的人我都谢谢你们的关心。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //你参考一下//倒入ADO库 #import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")#include <stdio.h>// 错误处理的inline void TESTHR( HRESULT _hr ) { if FAILED(_hr) _com_issue_error(_hr); }void main(void){ CoInitialize(NULL); try { _RecordsetPtr pRs("ADODB.Recordset"); _ConnectionPtr pCn("ADODB.Connection"); _variant_t vtTableName("authors"), vtCriteria; long ix[1]; SAFEARRAY *pSa = NULL; pCn->Open("DSN=pubs;User ID=sa;pwd=;Provider=MSDASQL;", "", "", adConnectUnspecified);// Note 2, Note 3 pSa = SafeArrayCreateVector(VT_VARIANT, 1, 4); if (!pSa) _com_issue_error(E_OUTOFMEMORY);// 为第三个元素赋值TABLE_NAME(索引值2). ix[0] = 2; TESTHR(SafeArrayPutElement(pSa, ix, &vtTableName));// 由于Variant没有SafeArray的构造函数,所以手工设置Variant的数据类型和值。 vtCriteria.vt = VT_ARRAY | VT_VARIANT; vtCriteria.parray = pSa; pRs = pCn->OpenSchema(adSchemaColumns, vtCriteria, vtMissing); long limit = pRs->GetFields()->Count; for (long x = 0; x < limit; x++) printf("%d: %s\n", x+1, ((char*) pRs->GetFields()->Item[x]->Name));// Note 4 pRs->Close(); pCn->Close(); } catch (_com_error &e) { printf("Error:\n"); printf("Code = %08lx\n", e.Error()); printf("Code meaning = %s\n", (char*) e.ErrorMessage()); printf("Source = %s\n", (char*) e.Source()); printf("Description = %s\n", (char*) e.Description()); } CoUninitialize();} #define DBNTWIN32#include <stdio.h>#include <windows.h>#include <sqlfront.h>#include <sqldb.h>// Forward declarations of the error handler and message handler. int err_handler(PDBPROCESS, INT, INT, INT, LPCSTR, LPCSTR);int msg_handler(PDBPROCESS, DBINT, INT, INT, LPCSTR, LPCSTR, LPCSTR, DBUSMALLINT);main(){ PDBPROCESS dbproc; // The connection with SQL Server. PLOGINREC login; // The login information. DBCHAR name[100]; DBCHAR city[100]; // Install user-supplied error- and message-handling functions. dberrhandle (err_handler); dbmsghandle (msg_handler); // Initialize DB-Library. dbinit (); // Get a LOGINREC. login = dblogin (); DBSETLUSER (login, "my_login"); DBSETLPWD (login, "my_password"); DBSETLAPP (login, "example"); // Get a DBPROCESS structure for communication with SQL Server. dbproc = dbopen (login, "my_server"); // Retrieve some columns from the authors table in the // pubs database. // First, put the command into the command buffer. dbcmd (dbproc, "SELECT au_lname, city FROM pubs..authors"); dbcmd (dbproc, " WHERE state = 'CA' "); // Send the command to SQL Server and start execution. dbsqlexec (dbproc); // Process the results. if (dbresults (dbproc) == SUCCEED) { // Bind column to program variables. dbbind (dbproc, 1, NTBSTRINGBIND, 0, name); dbbind (dbproc, 2, NTBSTRINGBIND, 0, city); // Retrieve and print the result rows. while (dbnextrow (dbproc) != NO_MORE_ROWS) { printf ("%s from %s\n", name, city); } } // Close the connection to SQL Server. dbexit (); return (0);}int err_handler (PDBPROCESS dbproc, INT severity, INT dberr, INT oserr, LPCSTR dberrstr, LPCSTR oserrstr){ printf ("DB-Library Error %i: %s\n", dberr, dberrstr); if (oserr != DBNOERR) { printf ("Operating System Error %i: %s\n", oserr, oserrstr); } return (INT_CANCEL);}int msg_handler (PDBPROCESS dbproc, DBINT msgno, INT msgstate, INT severity, LPCSTR msgtext, LPCSTR server, LPCSTR procedure, DBUSMALLINT line){ printf ("SQL Server Message %ld: %s\n", msgno, msgtext); return (0);}不知道是不是你想要的。 先谢谢你们。我又试了。都不行。我是在C++上运行的。第一个程序老不停止。第二个程序提示没sqlfront.h还有很多错误。呵呵。我是蔡鸟。不好意思。时间紧迫点。我自己也看看书。大家有可以执行的记得帮我贴上来。呵呵。谢谢啦。 谢谢。那我至少定下范围了。好好学习这两个程序。弱弱的问下:运行这两个程序需要装VC么?还有数据库如果是Access的上面的两个程序还可以么?我是蔡鸟。呵呵。不过也是努力学习的鸟儿哦。QQ:41968472欢迎探讨。共同学习。呵呵。好急啊。呵呵。 第一个程序你需要有一个和程序相匹配的数据库应该要装VC的如果你改成ACCESS的话,只要把连接字符串改一下就行了 恩,我建议搂主有时间看一下MSDN里面关于C/c++连接数据库的资料~~~但是我也没怎么用过.关于C/c++连接数据库方面的资料相对也比较少~~~ fanze2003(孤独的狼)、robin_yao(嘘)、sboom(+-LingCh-+)(爱美人不爱VC)、fanze2003(孤独的狼)、snowbirdfly(专心搞好嵌入式~~~)我都很感谢你们。你们的意见很有建设性。我这段时间没时间看。呵呵。我今天还没去调适。最近忙了点。哎。我也搞嵌入式。呵呵。 哎。网上的资料都不全。我现在是希望能在c++中连接Access。而不是VC。大虾们说下。这样可行么?因为这个程序的需求就是要求一定不要用vc阿。我也没办法。晕。 连接数据库,用ADO和ODBC都可以。只要是ADO和ODBC的方法,C++都可以使用。在使用的时候,请用纯C++支持的数据类型。可以不装VC,但至少需要一个C++编译器。 菜鸟问题:如何获取键盘按下的键值 DirectX的10Level9有啥用途? 一个关于子窗口的问题,高手请进,在线等!!! 两个进程之间可以收发自定义消息,那么两个进程之间通信是否一定要用WM_COPYDATA?为什么? Unicode问题 在CRichEditCtrl的插入图片动画问题(知道的高手请进) 求大神指导::怎么样逐一打开一个文件夹中的所有文件? dickcissel接分! 矩形算法问题 矩形A与矩形B以任意相交,求解属于A但不属于B的区域,结果用几个Rect表示 请问这里有没有超图公司的,不只北京超图怎么样? 请教关于遗传算法的问题 与技术无关。谁来说说你的看法。
//倒入ADO库
#import "c:\Program Files\Common Files\System\ADO\msado15.dll"
no_namespace rename("EOF", "EndOfFile")#include <stdio.h>// 错误处理的
inline void TESTHR( HRESULT _hr )
{ if FAILED(_hr) _com_issue_error(_hr); }
void main(void)
{
CoInitialize(NULL);
try
{
_RecordsetPtr pRs("ADODB.Recordset");
_ConnectionPtr pCn("ADODB.Connection");
_variant_t vtTableName("authors"),
vtCriteria;
long ix[1];
SAFEARRAY *pSa = NULL; pCn->Open("DSN=pubs;User ID=sa;pwd=;Provider=MSDASQL;", "", "",
adConnectUnspecified);
// Note 2, Note 3
pSa = SafeArrayCreateVector(VT_VARIANT, 1, 4);
if (!pSa) _com_issue_error(E_OUTOFMEMORY);// 为第三个元素赋值TABLE_NAME(索引值2).
ix[0] = 2;
TESTHR(SafeArrayPutElement(pSa, ix, &vtTableName));// 由于Variant没有SafeArray的构造函数,所以手工设置Variant的数据类型和值。
vtCriteria.vt = VT_ARRAY | VT_VARIANT;
vtCriteria.parray = pSa; pRs = pCn->OpenSchema(adSchemaColumns, vtCriteria, vtMissing); long limit = pRs->GetFields()->Count;
for (long x = 0; x < limit; x++)
printf("%d: %s\n", x+1,
((char*) pRs->GetFields()->Item[x]->Name));
// Note 4
pRs->Close();
pCn->Close();
}
catch (_com_error &e)
{
printf("Error:\n");
printf("Code = %08lx\n", e.Error());
printf("Code meaning = %s\n", (char*) e.ErrorMessage());
printf("Source = %s\n", (char*) e.Source());
printf("Description = %s\n", (char*) e.Description());
}
CoUninitialize();
}
#include <stdio.h>
#include <windows.h>
#include <sqlfront.h>
#include <sqldb.h>// Forward declarations of the error handler and message handler.
int err_handler(PDBPROCESS, INT, INT, INT, LPCSTR, LPCSTR);
int msg_handler(PDBPROCESS, DBINT, INT, INT, LPCSTR, LPCSTR,
LPCSTR, DBUSMALLINT);main()
{
PDBPROCESS dbproc; // The connection with SQL Server.
PLOGINREC login; // The login information.
DBCHAR name[100];
DBCHAR city[100]; // Install user-supplied error- and message-handling functions.
dberrhandle (err_handler);
dbmsghandle (msg_handler); // Initialize DB-Library.
dbinit (); // Get a LOGINREC.
login = dblogin ();
DBSETLUSER (login, "my_login");
DBSETLPWD (login, "my_password");
DBSETLAPP (login, "example"); // Get a DBPROCESS structure for communication with SQL Server.
dbproc = dbopen (login, "my_server"); // Retrieve some columns from the authors table in the
// pubs database. // First, put the command into the command buffer.
dbcmd (dbproc, "SELECT au_lname, city FROM pubs..authors");
dbcmd (dbproc, " WHERE state = 'CA' "); // Send the command to SQL Server and start execution.
dbsqlexec (dbproc); // Process the results.
if (dbresults (dbproc) == SUCCEED)
{
// Bind column to program variables.
dbbind (dbproc, 1, NTBSTRINGBIND, 0, name);
dbbind (dbproc, 2, NTBSTRINGBIND, 0, city); // Retrieve and print the result rows.
while (dbnextrow (dbproc) != NO_MORE_ROWS)
{
printf ("%s from %s\n", name, city);
}
} // Close the connection to SQL Server.
dbexit (); return (0);
}int err_handler (PDBPROCESS dbproc, INT severity,
INT dberr, INT oserr, LPCSTR dberrstr, LPCSTR oserrstr)
{
printf ("DB-Library Error %i: %s\n", dberr, dberrstr);
if (oserr != DBNOERR)
{
printf ("Operating System Error %i: %s\n", oserr, oserrstr);
}
return (INT_CANCEL);
}int msg_handler (PDBPROCESS dbproc, DBINT msgno, INT msgstate,
INT severity, LPCSTR msgtext, LPCSTR server,
LPCSTR procedure, DBUSMALLINT line)
{
printf ("SQL Server Message %ld: %s\n", msgno, msgtext);
return (0);
}不知道是不是你想要的。
我是蔡鸟。不好意思。
时间紧迫点。我自己也看看书。大家有可以执行的记得帮我贴上来。呵呵。
谢谢啦。
那我至少定下范围了。好好学习这两个程序。
弱弱的问下:运行这两个程序需要装VC么?还有数据库如果是Access的上面的两个程序还可以么?
我是蔡鸟。呵呵。不过也是努力学习的鸟儿哦。
QQ:41968472
欢迎探讨。共同学习。呵呵。
好急啊。呵呵。
如果你改成ACCESS的话,只要把连接字符串改一下就行了
但是我也没怎么用过.
关于C/c++连接数据库方面的资料相对也比较少~~~
因为这个程序的需求就是要求一定不要用vc阿。我也没办法。晕。
只要是ADO和ODBC的方法,C++都可以使用。在使用的时候,请用纯C++支持的数据类型。
可以不装VC,但至少需要一个C++编译器。