CSDN的各位大虾们帮帮小弟。
小弟连了1上午了。网上的资料不是很全阿,至少我找到的是这样的。
我just需要C++连接SQL Server的代码,不是VC。
呵呵,静候中阿。
不管怎么样,进来看的人我都谢谢你们的关心。
小弟连了1上午了。网上的资料不是很全阿,至少我找到的是这样的。
我just需要C++连接SQL Server的代码,不是VC。
呵呵,静候中阿。
不管怎么样,进来看的人我都谢谢你们的关心。
调试欢乐多
//倒入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++编译器。