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數據源連接到目標資料庫。
Ⅱ 關於C語言連接SQL資料庫…
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[]="數據源名稱"; //即<a href="https://www..com/s?wd=ODBC&tn=44039180_cpr&fenlei=_5y9YIZ0lQzqlpA-" target="_blank" class="-highlight">ODBC</a>源中設置的源名稱
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_<a href="https://www..com/s?wd=NULL&tn=44039180_cpr&fenlei=_5y9YIZ0lQzqlpA-" target="_blank" class="-highlight">NULL</a>_HANDLE, &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身份驗證,第二、三參數可以是<a href="https://www..com/s?wd=NULL&tn=44039180_cpr&fenlei=_5y9YIZ0lQzqlpA-" target="_blank" class="-highlight">NULL</a>,也可以是任何字串
//SQL_NTS 即 "<a href="https://www..com/s?wd=Null&tn=44039180_cpr&fenlei=_5y9YIZ0lQzqlpA-" target="_blank" class="-highlight">Null</a>-Terminated String"
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);
}
代碼看上去很復雜,其實都可以直接復制。其中需要改的是數據源名稱、資料庫用戶名、資料庫密碼和SQL語句。
然後就是SQLFetch後得到結果集後,如何使用的問題了。
在下面的注釋部分 填寫你的處理代碼即可。
/*
*對遍歷結果的相關操作,如顯示等
*/
Ⅲ 請問如何配置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連接sqlserver2005問題
粗略的看了一下,應該是SQLConnenct參數傳遞有問題吧。每個字元串後面跟的不是字元串的長度,而是表示字元串形式的宏定義,如SQL_NTS,表示NULL terminated string,就是以NULL結尾的字元串。你把裡面的strlen都換成SQL_NTS試試。
Ⅳ 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
Ⅵ 如何使用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建立鏈接!