codbc连接数据库
1、配置ODBC数据源。
2、使用SQL函数进行连接。
对于1、配置数据源,配置完以后就可以编程操作数据库了。
对于2、使用SQL函数进行连接,参考代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
void main()
{
HENV henv; //环境句柄
HDBC hdbc; //数据源句柄
HSTMT hstmt; //执行语句句柄
unsigned char datasource[]="数据源名称"; //即源中设置的源名称
unsigned char user[]= "用户名"; //数据库的帐户名
unsigned char pwd[]= "密码"; //数据库的密码
unsigned char search[]="select xm from stu where xh=0";
SQLRETURN retcode; //记录各SQL函数的返回情况
// 分配环境句柄
retcode= SQLAllocEnv(&henv); // 等介于 SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL
, &henv);
// 设置ODBC环境版本号为3.0
retcode= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
// 分配连接句柄
retcode= SQLAllocConnect(henv,&hdbc); // 等介于 SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//设置连接属性,登录超时为*rgbValue秒(可以没有)
// SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)(rgbValue), 0);
//直接连接数据源
// 如果是windows身份验证,第二、三参数可以是
⑵ c语言怎样连接数据库
1、配置ODBC数据源。
2、使用SQL函数进行连接。
对于1、配置数据源,配置完以后就可以编程操作数据库了。
对于2、使用SQL函数进行连接,参考代码如下:
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
void main()
{
HENV henv; //环境句柄
HDBC hdbc; //数据源句柄
HSTMT hstmt; //执行语句句柄
unsigned char datasource[]="数据源名称"; //即源中设置的源名称
unsigned char user[]= "用户名"; //数据库的帐户名
unsigned char pwd[]= "密码"; //数据库的密码
unsigned char search[]="select xm from stu where xh=0";
SQLRETURN retcode; //记录各SQL函数的返回情况
// 分配环境句柄
retcode= SQLAllocEnv(&henv); // 等介于 SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL
, &henv);
// 设置ODBC环境版本号为3.0
retcode= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
// 分配连接句柄
retcode= SQLAllocConnect(henv,&hdbc); // 等介于 SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//设置连接属性,登录超时为*rgbValue秒(可以没有)
// SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)(rgbValue), 0);
//直接连接数据源
// 如果是windows身份验证,第二、三参数可以是
,也可以是任何字串
//SQL_NTS 即 "
retcode= SQLConnect(hdbc,datasource, SQL_NTS, user, SQL_NTS , pwd, SQL_NTS );
//分配语句句柄
retcode= SQLAllocStmt(hdbc,&hstmt); // 等介于 SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
//直接执行查询语句
retcode=SQLExecDirect(hstmt,search,SQL_NTS);
//将数据缓冲区绑定数据库中的相应字段(i是查询结果集列号,queryData是绑定缓冲区,BUFF_LENGTH是缓冲区长度)
SQLBindCol(hstmt, i, SQL_C_CHAR, queryData[i-1], BUFF_LENGTH, 0);
//遍历结果集到相应缓冲区 queryData
SQLFetch(hstmt);
/*
*对遍历结果的相关操作,如显示等
*/
//注意释放顺序,否则会造成未知错误!
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
⑶ 我用VC程序建立ODBC方式数据库连接,用CRecordSet关联了两个表,请问我这么向数据库中插入数据。
CDatabase类用与和数据库进行连接、断开、插入...的操作。
CRecordSet类用与在数据库中读取数据。
你想向数据库中插入数据,就用CDatabase类就可以了。
SQL语句你知道吗?就是“insert into”什么的。
例如:
CDatabase* m_Database;
//你已经和数据库连接上了是吗?没有的话先连接上。
// m_Database->OpenEx(str, CDatabase::noOdbcDialog));
// str 是数据源。
//然后就向库中插入数据吧!
CString strSQL;
strSQL.Format("//一条SQL语句,就是insert into");
m_Database->ExecuteSQL(strSQL);
//这样就OK了。
⑷ 请问如何配置ODBC连接远程的SQL Server数据库
这好像不是你数据库设置的问题,而是局域网的问题,你试试看,在控制面板>管理工具>本地安全策略,中启动你和对方的guest帐号,网络访问方式改为经典-本地访问 ,在拒绝从网络访问这台计计算机中删除所有的,拒绝做为服务器登陆中清空所有的,然后关闭windows防火墙,
局域网内winXP(professional)的访问是个经常困扰大家的不大不小的问题,上次说我不够详细,你现在可以按以下的方法试一下,如果不成功,也可照此方法来解决局域网中经常出现的莫名奇妙的错误!!!我也是做DBMS的,出现的很多问题,貌似数据库故障,其实不然!!
一、首先启用guest来宾帐户;
二、控制面板→管理工具→本地安全策略→本地策略→用户权利指派里,“从网络访问此计算机”中加入guest帐户,而“拒绝从网络访问这台计算机”中删除guest帐户;
三、我的电脑→工具→文件夹选项→查看→去掉“使用简单文件共享(推荐)”前的勾;
四、设置共享文件夹;
五、控制面板→管理工具→本地安全策略→本地策略→安全选项里,把“网络访问:本地帐户的共享和安全模式”设为“仅来宾-本地用户以来宾的身份验证”(可选,此项设置可去除访问时要求输入密码的对话框,也可视情况设为“经典-本地用户以自己的身份验证”);
六、右击“我的电脑”→“属性”→“计算机名”,该选项卡中有没有出现你的局域网工作组名称,如“work”等。然后单击“网络 ID”按钮,开始“网络标识向导”:单击“下一步”,选择“本机是商业网络的一部分,用它连接到其他工作着的计算机”;单击“下一步”,选择“公司使用没有域的网络”;单击“下一步”按钮,然后输入你的局域网的工作组名,如“work”,再次单击“下一步”按钮,最后单击“完成”按钮完成设置。
一般经过以上步骤,基本可以解决。如果不行,再往下看:
七、检查本地连接是否被禁用,右击“本地连接”→“启用”;
八、关闭网络防火墙;
九、检查是否启用了域,是否加入了该域并检查域设置;
十、检查是否关闭了server服务;
十一、检查本地连接IP、子网掩码、网关及DNS设置是否有误;
十二、“本地连接”→属性→常规,检查是否安装了“Microsoft网络文件和打印机共享”、“Microsoft网络客户端”以及TCP/IP协议;
十三、某些局域网游戏和软件须安装NetBEUI协议。而且网上有文章说,在小型局域网中,微软在WinXP中只支持的TCP/IP协议和NWLink IPX/SPX/NetBIOS兼容协议表现不尽如人意,在小型局域网(拥有200台左右电脑的网络)中NetBEUI是占用内存最少、速度最快的一种协议。
安装方法:
①放入Windows XP安装光盘,到“valueaddMsft et etbeui”目录下将Netnbf.inf复制C:\Windows\INF中;
②将Nbf.sys复制到C:\Windows\System32\Drivers中;
③开始→控制面板→网上邻居”→“网络连接”→“本地连接”(就是你目前使用中的局域网连接)上按右键→“属性”→“常规”→“安装”→“通讯协议”→→“添加”,此时就可以看到“NetBEUI Protocol”这一项(此项原来是没有的),选取NetBEUI之后,按确定就OK了。
十四、作为网络浏览服务器的电脑由于病毒、配置低运行慢以及死机等原因导致网络上的计算机列表得不到更新,使得某些机器有时候在网上邻居中找不到。
解决办法:最简单的办法是重启各种网络设备和电脑,或者关闭个别有上述问题的电脑上的网络浏览服务器功能,方法如下:
win2000/XP下禁用Computer Browser服务
十五、给系统打上补丁。WinXP访问网上邻居的速度较慢,这是WinXP的一个Bug,当我们打开网上邻居时,操作系统首先会从计划任务中进行查找,因此就大大影响了访问的速度,除非您已经安装了SP1补丁才不会存在这个问题。
可以手工解决这一问题。从注册表中找到“\HKEY_LOCAL_MACHINE\
SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RemoteComputer\NameSpace”,这里有一个名为“{D6277990-4C6A-11CF-8D87-00AA0060F5BF}”的子键,该子键指向“计划任务(Scheled Tasks)”,将它直接删除即可。
十六、先卸载网卡驱动,重启再重装;
十七、硬件问题,检查网卡、网线、集线器、路由器等,在检查之前,最好先重启一下网络设备(集线器、交换机、路由器)看能否解决;
十八、病毒(木马)原因。升级病毒库安全模式下全盘杀毒。
⑸ C++如何连接ODBC
#ifdef WIN32
#include <windows.h>
#include <odbcinst.h>
#include <sqlext.h>
#else
#include <mysql.h>
#include <unistd.h>
#define SQLHANDLE static MYSQL
#endif
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
SQLHANDLE hDBEnv, hDBC;
int DB_Open(char * dbcn, char * usr, char * pwd)
{
int r;
#ifdef WIN32
r = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hDBEnv);
if(r) return 0;
r = SQLSetEnvAttr(hDBEnv,SQL_ATTR_ODBC_VERSION,
(void*)SQL_OV_ODBC3,0);
if(r) return 0;
r = SQLAllocHandle(SQL_HANDLE_DBC, hDBEnv, &hDBC);
if(r) return 0;
r = SQLConnect(hDBC,
(unsigned char *)dbcn, strlen(dbcn),
(unsigned char *)usr, strlen(usr),
(unsigned char *)pwd, strlen(pwd));
return r==SQL_SUCCESS || r==SQL_SUCCESS_WITH_INFO;
#else
mysql_init(&hDBC);
MYSQL * rx = mysql_real_connect(
&hDBC, dbcn, usr, pwd, NULL, 0, NULL, 0);
if(!rx) return 0;
return 1;
#endif
}//end DB_Open
int DB_Exec(char * sql)
{
#ifdef WIN32
SQLHANDLE hStatement = NULL;
SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStatement);
SQLExecDirect(hStatement,(unsigned char *)sql, strlen(sql));
SQLCloseCursor(hStatement);
SQLFreeHandle(SQL_HANDLE_STMT, hStatement);
hStatement = NULL;
#else
mysql_real_query (&hDBC, sql, strlen(sql));
#endif
return 1;
}//end DB_Exec
int DB_Close(void)
{
#ifdef WIN32
SQLDisconnect(hDBC);
SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
SQLFreeHandle(SQL_HANDLE_ENV, hDBEnv);
#else
mysql_close(&hDBC);
#endif
return 1;
}//DB_Close()
#ifndef WIN32
typedef struct tagMySQLRecordset {
MYSQL_RES * hRecord;
void * * row;
int * size;
int cols;
} MYSQLRecordset;
#endif
void DB_CleanQuery(void *hRecordset)
{
if(!hRecordset) return;
#ifdef WIN32
__try {
SQLCloseCursor(hRecordset);
SQLFreeHandle(SQL_HANDLE_STMT, hRecordset);
hRecordset = NULL;
}__finally{
return;
}//end try
#else
MYSQLRecordset * hRec = (MYSQLRecordset *) hRecordset;
mysql_free_result (hRec->hRecord);
free(hRec->row); hRec->row = NULL;
free(hRec->size); hRec->size = NULL;
free(hRec); hRec = NULL;
#endif
}//end DB_CleanQuery
int DB_Next(void * hRecordset)
{
int r=0; if(!hRecordset) return 0;
#ifdef WIN32
r = SQLFetch(hRecordset);
r = r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO;
if(!r) {
DB_CleanQuery(hRecordset);
}//end if
#else
MYSQLRecordset * hRec = (MYSQLRecordset *) hRecordset;
MYSQL_ROW row = mysql_fetch_row (hRec->hRecord);
if(row) {
for(int i=0; i<hRec->cols; i++) {
memcpy(hRec->row[i], row[i], hRec->size[i]);
}//next i
r = 1;
}else{
DB_CleanQuery(hRecordset);
r = 0;
}//end if
#endif
return r;
}//end DB_Next
int DB_params_count(const char * fmt)
{
int i=0, j=0;
while(fmt[i]) {
if(fmt[i]=='%') j++;
i++;
}//end while
return j;
}//end DB_params_count
void * DB_Query(char *sql, const char *fmt, ...)
{
int r=0;
int cols = DB_params_count(fmt);
if(cols<1) return NULL;
#ifdef WIN32
SQLHANDLE hStatement = NULL;
SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStatement);
r = SQLExecDirect(hStatement,(unsigned char *)sql, strlen(sql));
r = r==SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO;
if(!r) {
return NULL;
}//end if
#else
r = mysql_real_query (&hDBC, sql, strlen(sql));
if(r) return NULL;
MYSQL_RES * rec = NULL;
rec = mysql_store_result (&hDBC);
if(!rec) return NULL;
MYSQLRecordset * hStatement
= (MYSQLRecordset *)malloc(sizeof(MYSQLRecordset));
if(!hStatement) return NULL;
memset(hStatement, 0, sizeof(MYSQLRecordset));
hStatement->hRecord = rec;
hStatement->cols = cols;
hStatement->row = (void **)malloc(cols * sizeof(void *));
memset(hStatement->row, 0, cols * sizeof(void *));
hStatement->size = (int *)malloc(cols * sizeof(int));
memset(hStatement->size, 0, cols * sizeof(int));
#endif
va_list ap; va_start(ap, fmt);
void * var; char buf[32];
int i=0,j=0,k=0,sz=0; char c=0;
int len = strlen(fmt); int bad=1;
#ifdef WIN32
int col=1;
#else
int col=0;
#endif
while(fmt[i]) {
c = fmt[i++];
if(c != '%') continue;
c = fmt[i++];
var = va_arg(ap, void *);
if(c == 'd') {
#ifdef WIN32
SQLBindCol(hStatement, col, SQL_C_SLONG, var, 4,NULL);
#else
hStatement->row[col] = var;
hStatement->size[col] = sizeof(long);
#endif
col++;
continue;
}//end if
if(c == 'f') {
#ifdef WIN32
SQLBindCol(hStatement, col, SQL_C_FLOAT, var, 4,NULL);
#else
hStatement->row[col] = var;
hStatement->size[col] = sizeof(float);
#endif
col++;
continue;
}//end if
memset(buf, 0, 32); bad=1;
for(j=i-1; j<len; j++) {
c = fmt[j];
if(c>='0' && c<='9') buf[j-i+1]=c;
if(c=='s') {bad=0; k=j+1; break;}
}//next j
if(bad) return NULL;
sscanf(buf, "%d", &sz);
#ifdef WIN32
SQLBindCol(hStatement, col, SQL_C_CHAR, var, sz, NULL);
#else
hStatement->row[col] = var;
hStatement->size[col] = sz;
#endif
col++;
i = k;
}//end while
va_end(ap);
return hStatement;
}//end DB_Rec
⑹ C++如何连接ODBC
private System.Data.SqlClient.SqlConnection getConnection(){
System.Data.SqlClient.SqlConnection conn=new System.Data.SqlClient.SqlConnection("server=.;uid=sa;pwd=8912737;database=ddd");
return conn;
}
public bool checkUser(string name,string pwd){
bool boo=false;
System.Data.SqlClient.SqlConnection conn=this.getConnection();
string sql=string.Format("select * from UserInfo where LoginName='{0}'",name);
System.Data.SqlClient.SqlDataAdapter adap=new System.Data.SqlClient.SqlDataAdapter(sql,conn);
System.Data.DataSet ds=new System.Data.DataSet();
adap.Fill(ds);
if(ds.Tables[0].Rows.Count!=0 && ds.Tables[0].Rows[0][2].Equals(pwd))
{
boo=true;
}
return boo;
}
private static string conn="server=.;database=数据库名字;integrated security=sspi";
这就是连接数据库的字符串
sqlconnection cn=new sqlconnection(conn);
sqlcommand cmd=new sqlcommand(sql语句,cn);
就ok了
也可以不用sqlcommand,用SqlDataAdapter
⑺ 请教一个ODBC连接progress数据库的问题
Windows 客户端:
1、在 C:\windows\system32\drivers\etc\services 文件中加入一行:
merant 50000/tcp # merant ODBC
注:这跟上面在 Linux 服务器中的配置是一样的,必须与服务器端一致,上面使用了 50000 端口,这里也使用 50000 端口。
2、配置数据源,添加一个数据源,各选项参数如下:
[General]
Data Source Name:给数据源取名,便于在程序中引用
Description:数据源描述说明,随便写
Database Name:数据库的名字,比如 mfgprod
User ID:可不填(这个用户名是 Progress 数据库自己的用户名,不是 Windows 或 Linux 用户,也不是 MFG/PRO 用户,如果数据库设置为拒绝匿名访问的话就要填写)
[Oid/Oib Options]
Protocol:TCP (连接类型,就是你在 services 文件中设定的连接类型)
Service Name:端口名称,在 services 文件中加的 merantODBC 的端口名称,如 merant(其实直接用端口号也可以,这样就不用在 services 文件中定义端口了)
Host Name:服务器的名称或IP(建议用IP,否则还要在 hosts 文件中加解析)
[Database Options]
Database Access Mode:Via Server (连接方式,分 Direct 和 Via Server,最好使用 Via Server,如果使用 Direct 的话,直接在 Database path 里填入数据库所在的物理路径即可,以下各项不需再填)
Protocol:TCP (这里应该是你数据库的端口类型,我还没弄清楚,一般填 TCP 即可)
Service Name:启动数据库的端口名(注意,这是你的数据库本身的端口名,即你在服务器端用 mfgutil 工具所设定的端口,不要问我 mfgutil 怎么用,实在不知道,可以查看一下数据库在 MFG/PRO 里对应的 .pf 文件,里面有写的)
Host Name: 服务器的名称或IP(推荐IP)
最后,点 Test Connect 测试连接即可,成功的话会显示 Connect establish。
其实用 ODBC 连接 Progress 并不复杂,总的来说就是在服务器端启动 ODBC 服务,然后在客户端使用 ODBC 软件连接,而其它的步骤只是为了方便它而已,比如定义端口,或者添加搜索路径(没多大影响,本教程中省略此步)等,最关键就是要在服务器端成功启动 ODBC。
⑻ ODBC 连接数据库
学编程千万别用数据源,下面是纯SDK写法。看一下终身受益
首先应该导入:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
具体操作如下:
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
pConn.CreateInstance("ADODB.connection");
CString conn="Provider=microsoft.jet.oledb.4.0;data source=txl.mdb"
if(FAILED(pConn->Open((_bstr_t)conn,"","",-1)))
{
AfxMessageBox("连接失败");
return;
}
pConn->Close();
pConn.Release();
CoUninitialize();
⑼ c语言程序通过ODBC连接Oracle数据库
参考答案: 东飞伯劳西飞燕,黄姑织女时相见。