① 如何使用odbc連接資料庫
首先安裝Mysql資料庫。
然後安裝MySQL ODBC 驅動
將要連接的MySQL資料庫文件夾復制到MySQL安裝文件夾的DATE目錄下,DATE下的文件名為資料庫名:
1、C:Program FilesMySQLMySQL Server 5.0data
2、C:ProgramDataMySQLMySQL Server 5.1data
根據您的系統可能不能,本人WIN7系統為上面第二個目錄,安裝完成後,我們下一步就創建ODBC數據源,步驟如下:
一、打開控制面板——管理工具——數據源(ODBC)——文件DSN如下圖:
然後系統會彈出下圖窗口,在Server:中填入本機地址:127.0.0.1, Port:3306(MySQL默認埠),User:填root(默認用戶名為小寫root),密碼填入安裝時輸入的密碼,database:選擇MySQL資料庫,完成按OK這樣數據源就創建成功!
然後打開Access--外部數據--導入ODBC資料庫—選擇導入新表或鏈接--然後選擇剛剛創建的數據源,也可以在這里新建數據源,方法和前面一樣。
然後輸入密碼,選擇資料庫按OK建立鏈接!
② 如何使用ODBC來連接ACCESS資料庫
作步驟如下:
(1)單擊「開始」按鈕,選擇「程序」→「管理工具」→「數據源(ODBC)」命令,打開「ODBC數據源管理器」對話框,打開「系統DSN」選項卡。
(2)單擊「添加」按鈕,打開「創建新數據源」對話框,選擇安裝數據源的驅動程序,這里選擇「Microsoft Access Driver (*.mdb)」,如圖2.6所示。
選擇安裝數據源的驅動程序
(3)單擊「完成」按鈕,打開「ODBC Microsoft Access 安裝」對話框,填寫「數據源名」及相關「說明」,並指定所要連接資料庫的路徑,如圖2.7所示。
「ODBC Microsoft Access 安裝」對話框
(4)單擊「確定」按鈕,完成配置系統DSN的操作。
使用ODBC方法連接Access資料庫的代碼如下:
常式2-2 代碼位置:光碟\mr\2\2.2\2.2.1\02\conn.asp
<%
Dim Conn
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=AccessDSN"
%>
如果Access資料庫設有密碼,可以使用以下代碼連接資料庫:
<%
Dim Conn
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=AccessDSN;uid=admin;pwd=123456;"
%>
③ 請教各位winc怎麼和access資料庫做ODBC連接,
cn="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:\學生資料庫.mdb;Persist
Security
Info=False"
這個連接的方式很通用
④ 怎麼通過ODBC把資料庫與c語言聯系起來,調用資料庫的內容
#ifndef ___LIB_DB___
#define ___LIB_DB___
extern int DB_Open(char * dbcn, char * usr, char * pwd);
extern int DB_Exec(char * sql);
extern void * DB_Query(char *sql, const char *fmt, ...);
extern int DB_Next(void * hRecordset);
extern void DB_CleanQuery(void *hRecordset);
extern int DB_Close(void);
#endif
#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
⑤ 通過ODBC 如何 連接網路資料庫C#或VB.net
由於你用的是access資料庫,access資料庫是本地資料庫,不支持網路使用.建議你改用sql server或者其它支持網路應用的資料庫.
如果你要在另一台機器上使用access資料庫,一是你把資料庫拷貝到另一台機器上,但這樣是兩個資料庫是相互獨立的,數據不能共享.另一種方法是開一個有許可權的網路共享,遠程計算機通過網路共享的方法訪問你所使用的access資料庫,兩種方法只要用odbc連接成功,連接字元串和上面使用的是一樣的寫法
⑥ C語言用odbc連接資料庫的問題
#include <mysql/mysql.h>
#include <stdio.h>
void main(){
MYSQL *mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char *query;
int t,r;
mysql_init(mysql);
if (!mysql_real_connect(mysql,"localhost","mysql",
"mysql","deneme",0,NULL,0))
{
printf( "Error connecting to database: %s\n",mysql_error(mysql));
}
else printf("Connected...\n");
query="select * from Deneme";
t=mysql_real_query(mysql,query,(unsigned int) strlen(query));
if (t)
{
printf("Error making query: %s\n",
mysql_error(mysql));
}
else printf("Query made...\n");
res=mysql_use_result(mysql);
for(r=0;r<=mysql_field_count(mysql);r++){
row=mysql_fetch_row(res);
if(row<0) break;
for(t=0;t<mysql_num_fields(res);t++){
printf("%s ",row[t]);
}
printf("\n");
}
mysql_close(mysql);
}
簡介
C APIs包含在mysqlclient庫文件當中與MySQL的源代碼一塊發行,用於連接到資料庫和執行資料庫查詢。有一些例子在MySQL原代碼的clients目錄里。
MySQL C 變數類型
以下變數類型在MySQL的庫當中定義。我們需要這些變數是為了使用MySQL的函數。這些變數有詳細的解釋,但是這些解釋對於寫代碼來說並不重要。
MYSQL
以下代碼塊是用來連接資料庫的通訊過程
typedef struct st_mysql {
NET net; /* Communication parameters */
gptr connector_fd; /* ConnectorFd for SSL */
char *host,*user,*passwd,*unix_socket,
*server_version,*host_info,*info,*db;
unsigned int port,client_flag,server_capabilities;
unsigned int protocol_version;
unsigned int field_count;
unsigned int server_status;
unsigned long thread_id; /* Id for connection in server */
my_ulonglong affected_rows;
my_ulonglong insert_id; /* id if insert on table with NEXTNR */
my_ulonglong extra_info; /* Used by mysqlshow */
unsigned long packet_length;
enum mysql_status status;
MYSQL_FIELD *fields;
MEM_ROOT field_alloc;
my_bool free_me; /* If free in mysql_close */
my_bool reconnect; /* set to 1 if automatic reconnect */
struct st_mysql_options options;
char scramble_buff[9];
struct charset_info_st *charset;
unsigned int server_language;
} MYSQL;
MYSQL_RES
這段代碼返回查詢結果的行。返回的數據稱為「數據集」
typedef struct st_mysql_res {
my_ulonglong row_count;
unsigned int field_count, current_field;
MYSQL_FIELD *fields;
MYSQL_DATA *data;
MYSQL_ROWS *data_cursor;
MEM_ROOT field_alloc;
MYSQL_ROW row; /* If unbuffered read */
MYSQL_ROW current_row; /* buffer to current row */
unsigned long *lengths; /* column lengths of current row */
MYSQL *handle; /* for unbuffered reads */
my_bool eof; /* Used my mysql_fetch_row */
} MYSQL_RES;
MYSQL_ROW
這個結構是數據行的一個安全表示法。你無法使用以空字元結束的串,因為數據在這個串可以是二進制, 也許沒有包括任何字元。
typedef struct st_mysql_field {
char *name; /* Name of column */
char *table; /* Table of column if column was a field */
char *def; /* Default value (set by mysql_list_fields) */
enum enum_field_types type; /* Type of field. Se mysql_com.h for types */
unsigned int length; /* Width of column */
unsigned int max_length; /* Max width of selected set */
unsigned int flags; /* Div flags */
unsigned int decimals; /* Number of decimals in field */
} MYSQL_FIELD;
my_ulonglong
該類型用於行數,mysql_affected_rows() 、mysql_num_rows()和mysql_insert_id() 。該類型提供范圍0 到1.84.e19 的支持。在一些系統, 試圖列印出my_ulonglong類型的值是不行的.要顯示這樣的值, 使用%lu printf 格式,把它轉換成unsigned long類型就行了。例如:
printf(Number of rows: %lu\n", (unsigned long) mysql_num_rows(result));
typedef unsigned long my_ulonglong;
連接MySQL,查詢數據
現在假設MySQL已安裝, 用戶和數據表在資料庫被創造。以防有什麼不明問題的情況, 請參考www.mysql.com 網站。
前面已經說過,MySQL的庫文件在mysqlclient。因此在編譯MySQL程序的時候有必要加上-lmysqlclient編譯選項。MySQL的頭文件在/usr/include/mysql目錄下(根據Linux的發行版本的不同,這個目錄也有所不同),因此你的程序頭部看起來有點這個樣子:
#include <mysql/mysql.h>
MySQL的變數類型和函數都包含在這個頭文件當中
然後,我們需要創建連接資料庫的變數,可以簡單地這么做:
MYSQL *mysql;
在連接資料庫之前,我們要調用以下函數初始化這個變數:
mysql_init(MYSQL *mysql)
然後
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned int clientflag);
該函數被調用連接到資料庫。host是MySQL伺服器的主機名,user是登錄的用戶名,passwd是登錄密碼,db是要連接的資料庫,port是MySQL伺服器的TCP/IP埠,unix_socket是連接類型,clientflag是MySQL運行成ODBC資料庫的標記。在這篇文章當中該標記設成0,連接尋建立後,這個函數返回0。
現在可以連接資料庫,進行查詢了:
char *query;
使用這個字元串我們可以創立任何SQL查詢語句進行查詢。執行這個查詢的函數是:
int STDCALL mysql_real_query(MYSQL *mysql,
const char *q,
unsigned int length);
mysql是我們前面用過的變數,q是SQL查詢語句,length是這個查詢語句的長度。如果查詢成功,函數返回0。
查詢之後,我們要到一個MYSQL_RES變數來使用查詢的結果。以下這行創立這個變數:
MYSQL_RES *res;
然後
mysql_use_result(MYSQL *query)
該函數讀出查詢結果。
盡管可以很容易地查詢了,要用這個查詢的結果還要用到其它的函數。第一個是:
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
該函數把結果轉換成「數組」。你可能注意到了,該函數返回的是MYSQL_ROW變數類型。以下語句創立那樣的變數:
MYSQL_ROW row;
如前所解釋的,變數row是一個字元串數組。也就是說,row[0]是數組的第一個值,row[1]是數組的第二個值...當我們用mysql_fetch_row的時候,接著變數row會取得結果的下一組的數據。當到了結果的尾部,該函數返回一負值。最後我們要關閉這個連接:
mysql_close(MYSQL *mysql)
一些有用的函數
看看如何取得一個表格的欄位,以下這個函數可能實現這個功能:
unsigned int STDCALL mysql_num_fields(MYSQL *mysql);
這個函數返回表格里有多少個欄位。
取得「數據集」的數目,用:
my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);
my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql);
這個函數是用來得到受INSERT, DELETE, UPDATE查詢語句影響的「數據集」數目。注意該函數返回的數據類型是my_ulonglong
⑦ 新人貼,C#通過ODBC連接MySQL資料庫怎麼實現
mysql的odbc驅動下載官方地址為:http://dev.mysql.com/downloads/connector/odbc/[喝小酒的網摘]http://blog.hehehehehe.cn/a/17717.htm
當前文章的驅動版本為5.3.4,文件為:mysql-connector-odbc-5.3.4-win32.msi或者mysql-connector-odbc-5.3.4-winx64.msi
安裝後,驅動為:ODBC driver Mysql ODBC 5.3 ANSI Driver
解決方案管理中添加引用 Microsoft.Data.Odbc.dll
代碼中增加引用 using Microsoft.Data.Odbc;
代碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Data.Odbc;
namespace mysql
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string MyConString = "DRIVER={MySQL ODBC 5.3 ANSI Driver};" +
"SERVER=localhost;" +
"DATABASE=inv;" +
"UID=root;" +
"PASSWORD=888888;" +
"OPTION=3";
OdbcConnection MyConnection = new OdbcConnection(MyConString);
MyConnection.Open();
Console.WriteLine(" success, connected successfully ! ");
string query = "insert into test values( 'hello', 'lucas', 'liu')";
OdbcCommand cmd = new OdbcCommand(query, MyConnection);
//處理異常:插入重復記錄有異常
try{
cmd.ExecuteNonQuery();
}
catch(Exception ex){
Console.WriteLine("record plicate.");
}finally{
cmd.Dispose();
}
//***********************用read方法讀數據到textbox**********************
string tmp1 = null;
string tmp2 = null;
string tmp3 = null;
query = "select * from test ";
OdbcCommand cmd2 = new OdbcCommand(query, MyConnection);
OdbcDataReader reader = cmd2.ExecuteReader();
while (reader.Read())
{
tmp1 = reader[0].ToString();
tmp2 = reader[1].ToString();
tmp3 = reader[2].ToString();
}
this.textBox1.Text = tmp1 + " " + tmp2 + " " + tmp3;
*/
MyConnection.Close();
}
}
}
⑧ odbc連接sql資料庫的具體步驟是什麼
1控制面板--管理工具--數據源ODBC--系統DNS--添加。
2在創建新數據源的對話框中選擇SQL
Server後單擊「完成」,
3在創建到SQL
Server的新數據源對話框中的「名稱」文本框中輸入數據源名,輸入描述內容,在「伺服器」列表中選擇輸入SQL伺服器的名稱,單擊下一步。
4設置登陸ID和密碼
5選擇資料庫
6測試資料庫
7完成
⑨ c語言程序通過ODBC連接Oracle資料庫
參考答案: 東飛伯勞西飛燕,黃姑織女時相見。
⑩ 怎麼用odbc連接mysql資料庫
1.選擇「開始」→「管理工具」→「數據源(ODBC)」選項,顯示「ODBC數據源管理器」對話框。
2.切換到「系統DSN」選項卡,默認情況下計算機中沒有部署和任何資料庫的連接。
3.單擊「添加」按鈕,顯示「創建新數據源」對話框。在「選擇您想為其安裝數據源的驅動程序」列表中,選擇「SQL Server」選項。
4.單擊「完成」按鈕,啟動創建新數據源向導,顯示「創建到SQL Server的新數據源」對話框。在「名稱」文本框中,鍵入數據源的名稱,在「伺服器」列表中選擇目標SQL Server 2008資料庫伺服器,或者鍵入資料庫伺服器的名稱。
5.單擊「下一步」按鈕,顯示下圖對話框,設置資料庫的身份驗證方法。ODBC支持基於Windows NT模式的身份驗證和基於SQL Server的驗證模式。本例中選擇SQL Server驗證模式。在「登錄ID」文本框中,鍵入資料庫管理員的名稱,在「密碼」文本框鍵入資料庫管理員的密碼。
6.單擊「下一步」按鈕,顯示下圖所示的對話框。設置連接的目標SQL Server 2008資料庫伺服器後,默認連接的資料庫。默認沒有選擇任何資料庫,其他選項使用默認值即可。
7.單擊「下一步」設置連接到SQL Server 2008的資料庫參數,建議使用默認值。如果在部署SQL Server 2008的過程中,更改了默認的資料庫參數,建議在此對話框中設置和部署資料庫時使用相同的參數。
8.單擊「完成」按鈕,顯示創建ODBC數據源使用的參數。
9.單擊「測試數據源」按鈕,測試能夠連接到目標資料庫,如果成功顯示「SQL Server ODBC 數據源測試」對話框,在「測試結果」列表中會顯示「測試成功」信息。
10.單擊兩次「確定」按鈕,完成ODBC數據源的創建,創建成功的數據源。應用程序即可通過ODBC數據源連接到目標資料庫。