c遠程訪問mysql
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身份驗證,第二、三參數可以是
㈡ 伺服器的MySQL不能遠程訪問
添加配置:
確定使用的mysql版本,如果為5.0以上的版本需要在mysql的配置文件 (windows下my.ini,linux下my.cnf)中添加如下代碼:
[mysqld]
skip-name-resolve
注意配置完成後重啟mysql服務,5.0一下的就不需要添加了。
分配許可權:
這里我們建議單獨創建一個用戶,不要使用root用戶,這個用戶最好是指定需要連接的計算機。
代碼如下:
MySQL> use MySQL;
Database changed
MySQL> grant all privileges on *.* to 『yourUser』@'%' identified by 『yourPassword』;
Query OK, 0 rows affected (0.00 sec)
*.*標示所有資料庫下的所有表,』*』.*標示資料庫*下的所有表
MySQL> grant all on *.* to 『yourUser』@'%' identified by 『yourPassword』;
Query OK, 0 rows affected (0.00 sec)
%號出可以填寫允許訪問的IP地址或者主機名,%標示所有的IP
Flush privileges;
Query OK, 0 rows affected (0.00 sec)
Mysql> exit;
Bye
啟動連接:
C:\Program Files\MySQL\bin> mysql –h 需要遠程連接的IP或者是主機名 –u 分配的遠程連接賬戶 –p
Enter password:密碼
㈢ 如何連接遠程Mysql資料庫
一、連接遠程資料庫:
1、顯示密碼
如:MySQL
連接遠程資料庫(192.168.5.116),埠「3306」,用戶名為「root」,密碼「123456」
C:/>mysql -h
192.168.5.116 -P 3306 -u root -p123456
2、隱藏密碼
如:MySQL 連接本地資料庫,用戶名為「root」,
C:/>mysql -h
localhost -u root -p
Enter password:
二、配置mysql允許遠程鏈接
默認情況下,mysql帳號不允許從遠程登陸,只能在localhost登錄。本文提供了二種方法設置mysql可以通過遠程主機進行連接。
一、改表法
在localhost登入mysql後,更改 "mysql" 資料庫里的 "user" 表裡的 "host"
項,將"localhost"改稱"%"
例如:
#mysql -u root
-p
Enter password:
……
mysql>
mysql>update user
set host = '%' where user = 'root';
mysql>select host,
user from user;
二、授權法
例如:
你想myuser使用mypassword(密碼)從任何主機連接到mysql伺服器的話。
mysql>GRANT ALL
PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允許用戶myuser從ip為192.168.1.6的主機連接到mysql伺服器,並使用mypassword作為密碼
mysql>GRANT ALL
PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY
'mypassword' WITH GRANT OPTION;
mysql>FLUSH
PRIVILEGES
使修改生效,就可以了
常見問題:
1、在採用法二授權法之後,無法在本地登錄mysql(如:#mysql -u root -p -h
192.168.5.116
Enter password:
ERROR 1045 (28000): Access denied for user
'root'@'loadb116' (using password: YES)
上例中loadb116是主機名.
解決方法:
1、這時可以使用:mysql -u
root -p 登錄,進入到mysql後。
mysql> grant all privileges on *.* to 'root'@'loadb116'
identified by '123456' with grant option;
Query OK, 0 rows affected
(0.00 sec)
mysql> flush
privileges;
Query OK, 0 rows affected (0.00
sec)
2、在本地使用ip地址登錄
#
mysql -u root -p -h
192.168.5.116
Enter password:
Welcome to the MySQL
monitor. Commands end with ; or /g.
Your MySQL connection id is 60
Server
version: 5.1.45 MySQL Community Server (GPL)
Type 'help;' or '/h' for
help. Type '/c' to clear the buffer.
mysql>
㈣ linux下c語言連接Mysql
老大,原來你連 C 的原理都不會啊?
C 語言所有調用函數,都要有聲明,這種外部函數庫的調用,都要用他們的 header 文件來聲明函數變數等等的東西,編譯器會根據實際情況去把這些程序裡面的函數調用鏈接到函數庫的正確位置上。
微軟的產品因為他壟斷了他自己系統的所有功能設計。所以他的系統+他的開發程序+他的開發函數庫就不需要 header 文件了,因為它可以設計為 dll 本身含有足夠的信息去干別的事情了。所以,你別以為你用了微軟的 .net ,他就還是 C 語言了。他已經脫離了 C 語言的范圍了。
GCC一般情況下是編譯器,但編譯器是不夠的,還需要連接器的工作才行。binutils 裡面的軟體提供相關的功能。
要知道以前鏈接到函數庫功能,光有 header 和函數庫文件本體還是不行的,還需要另外的函數庫信息文件來幫助編譯器連接器來找到正確的函數入口位置才行的。
你編程 C ,你要選擇你所使用的功能調用方法,GCC 一般調用 mysql 有調用外部 dll ,或者程序自己直接鏈接 mysql 埠,自己分析 mysql 服務進程發送的各種信息!
前一種辦法,可以直接選擇 mysql 客戶端裡面的 SDK 來直接獲得官方的功能支持,但官方 MySQL 是 GPL 協議發布的,你使用他的功能介面後,你的程序也必須以 GPL 發布,不然你就要去選擇其他的函數庫,比如 ODBC 的 mysql 庫。當然還有第三方的 mysql 功能庫可以選擇。
不過你要注意,LGPL 必須嚴格區分你的程序和 LGPL 代碼。你必須動態鏈接到 LGPL 函數庫。如果你的程序包含 LGPL 函數庫一起發布,且 LGPL 庫是你的軟體的必備函數庫,那麼你的程序也必須開源,但不是 GPL 而是 LGPL !
不然你就選擇自己寫程序直接與 mysql 伺服器進行數據傳輸,不使用第三方功能庫。
但我不認為身為一個 Linux 下程序開發人員,會去傻傻的自己寫功能函數而不是用現成的函數庫。
你所遇到的「非要客戶安裝 mysql client 」,就是因為你的軟體調用了一些非你自己編寫的函數調用功能,而為了獲取這些函數而需要安裝幾個 mysql 函數庫的問題。
這個問題我想不應該是一個開發人員提出來的吧?
------------------------------------
樓主你還是重新學習 C 語言吧。.net 的 C 被微軟改的不是真正的 C 語言了,所以你沒辦法按照 C 的標准去比較 .net 和 GCC 的。
而且很多 .net 的編程習慣也沒辦法延續到 GCC 的。
㈤ mfc如何遠程連接sql資料庫(mfc連接mysql資料庫)
1.首先,你的機器上要保證有sqlserver,並能正確進入並創建資料庫,表等。2.建議把那個SA的密碼自己重新設定一下,設定方法:打開,進去後在那個安全性--登錄名--右鍵點擊SA屬性,設置密碼,狀態裡面改成,授予啟用。3.將ADO代碼庫引入到工程中,需要在stdafx.h或TEST.h(這個MFC項目的頭文件)中添加如下代碼,注意不同的操作系笑擾迅統在安裝時這個路徑可能不一樣,所以必須先在系統中找到msado15.dll文件的路徑:加入代碼:#import"C:ProgramFilesCommon.dll"no_namespacerename("EOF","adoEOF")?(通過以上代碼就可以將ADO代碼庫引入到當前工程中)?4.在TEST工程中的TEST.h中加入如下代碼:(藍色為所加入的)classCSQL_TESTApp:publicCWinApp{public:?_m_pAppConn;?//連碰此接對象指針
CStringm_;?//連接字元串的聲明
boolm_bConnected;//連接標志public:
CSQL_TESTApp();//Overrides
//
//{{AFX_VIRTUAL(CSQL_TESTApp)public:virtualBOOL();
。};?5.在TEST工程的TEST.CPP文件中加入如下代碼:(藍色為所加入的)BOOLCSQL_TESTApp::(){();?HRESULThRes;try{hRes=m_pAppConn.(_T("ADODB.Connection"));
m_pAppConn- if(SUCCEEDED(hRes)){m_bConnected=TRUE;//連接成功設置李梁標志位}}catch(_com_errore){CString; .(_T("連接資料庫失敗%s"),e.()); ();//顯示錯誤信息 returnFALSE;?} ㈥ 如何使用mysql的C介面訪問mysql資料庫
調用mysql資料庫API。
去官網下載mysql c API庫文件,然後安裝一下,每個調用資料庫的函數都有相關解釋,直接參照函數解釋進行編程就行了。
注意編寫makefile的時候把相關依賴庫加入