1. 資料庫連接方式有哪些
在基於微軟IIS/PWS的網路平台上,通過伺服器端運行的ASP程序來訪問後台資料庫,是一種最常見的模式了。而對於小型的資料庫應用需求,微軟的Access資料庫,應該是與ASP程序配套使用的首選。由於Access資料庫的ODBC驅動程序支持的sql指令全,執行效率高,所以Access後台資料庫+ASP伺服器端程序+客戶端IE瀏覽器,是一個精練實用高效的組合模式。
在這種使用模式中,ASP程序無疑是最重要的,是溝通客戶端和後台資料庫之間的橋梁。在ASP程序中,通過VB Script,建立對Access資料庫的連接,是客戶能夠訪問後台資料庫的前提。
一、建立Access資料庫連接的常用方法
在ASP中建立對Access資料庫連接的一般格式如下:
<%
DbPath=Server.MapPath(資料庫名)
Set Conn=Server.CreatObject(「ADODB.Connection」)
Conn.Open 「driver=;dbq=」& DbPath
Set rs=Server.CreatObject(「ADODB.Recordset」)
Rs.Open 數據表名或SQL指令,Connection對象,Recordset類型,鎖定類型
… …
%>
它的各步驟及參數意義如下:
第一行程序:利用Server對象的MapPath函數,取得要打開資料庫的完整的文件路徑,並存儲在變數DbPath中。這其中,資料庫名是我們需要指定的參數,應該用我們要打開的資料庫的實際名稱替代。如果資料庫名是直接作為常量出現,要用引號將其括起來,並且不能丟掉擴展名。例如資料庫是Test.mdb,則該行程序成為:DbPath=Server.MapPath(「Test.mdb」)。
第二行程序:建立一個ADO對象集中的Connection對象,也即連接對象。這是建立資料庫連接的初始步驟。執行這行程序後,Conn成為一個連接對象。
第三行程序:利用連接對象Conn的Open方法打開一個指定的資料庫。因為我們要打開的是Access資料庫,所以要指定ODBC驅動程序參數,表示要透過Access的ODBC驅動程序來訪問資料庫:driver=;。另一個參數dbq= & DbPath,運算後等效於dbq=Server.MapPath(資料庫名) ,是利用了第一行的Server.MapPath(資料庫名)函數,用來指定要打開的資料庫文件。到這里,就已經打開了資料庫名指定的資料庫。如果資料庫名是「test.mdb」,則打開Access資料庫Test.mdb。在這一行里指定的參數,要嚴格按照格式原樣寫出,不能省略或改動,也沒有可變參數。
第四行程序:建立一個ADO對象集中的Recordset對象,以便利用Recordset對象操作資料庫(當然,這只是對資料庫操作的多種方式之一)。執行這行後,rs就成為一個Recordset對象。
第五行程序:利用rs對象的Open方法打開資料庫中的數據表。這其中有四個參數,其意義如下:
數據表名或SQL指令串:在這個參數里指定要打開的資料庫內的數據表名稱,或者是用SQL的Select指令串確定的數據表的指定范圍數據,例如,資料庫Test.mdb中有數據表Number,則該參數成為「Number」,注意引號不能丟;若想打開數據表Number中xh欄位值小於90的數據記錄,則該參數可能成為如下的形式:
「Select * From Number Where xh < 90」。
Connection對象:指定已經打開的資料庫的Connection對象,在這里固定是Conn,注意無須引號的。
Recordset類型:表示打開數據表的方式,有四種選擇。數字0表示只讀方式,且當前記錄只能下移;數字1表示可讀寫方式,當前記錄可自由上下移動,但不能及時看到別的用戶建立的新記錄,除非重新啟動;數字2表示可讀寫方式,當前記錄可自由移動,而且可以及時看到別的用戶增加的新記錄;數字3表示只讀方式,但當前記錄可以自由移動。一般選擇2為好,除非為了禁止數據被修改。
鎖定類型:這個參數指定資料庫的鎖定功能。因為網路上的資料庫都是多用戶的,很可能同時有多個用戶在操作資料庫。為了避免錯誤,讓同一時間只可能有一個用戶修改數據,就要用鎖定功能。有四種選擇:數字1表示只讀方式鎖定,用戶不能更改數據;數字2表示悲觀鎖定,當一個用戶用rs對象開始修改數據時就鎖定資料庫,直到用戶用rs.Update更新記錄後,才解除鎖定;數字3表示樂觀鎖定,只有在數據寫入資料庫中時候才鎖定,不保險,慎用!數字4表示批次樂觀鎖定,只有在使用rs.UpdateBatch成批更新數據時候才鎖定數據記錄。屬於很少使用的。一般地,使用悲觀鎖定比較安全,但是效率要低些。
二、使用Recordset對象操作數據
用上面的方法打開資料庫,是利用了Recordset對象建立的資料庫連接,然後的對數據操作,也要使用該對象。
用rs.open 「數據表名」,Conn,2,2 方式打開數據表,就可以方便的對數據進行操作:
常見的操作對象:
rs.addnew :添加一個新記錄在數據表末尾。
rs.delete :刪除當前記錄。
rs.eof :判斷是否已過最後記錄。
rs.bof :判斷是否移過首記錄。
rs.update :數據修改生效。
rs(「欄位名」):當前記錄指定欄位的值。
從數據表中提取數據:用x=rs(「欄位名」)的格式,提取數據表中當前記錄指定欄位的值。
向數據表中填入或修改數據:用rs(「欄位名」)=數據值或變數的方式,修改當前記錄指定欄位的值。
三、使用SQL指令操作資料庫
在使用SQL指令對資料庫進行操作時,要用如下方式打開資料庫和操作:
<%
DbPath=Server.MapPath(資料庫名)
Set Conn=Server.CreatObject(「ADODB.Connection」)
Conn.Open 「driver=;dbq=」& DbPath
Sql=操作資料庫的指令串
Conn.Execute sql
… …
%>
四、使用DSN連接資料庫
在以上連接資料庫的方式中,都是在程序中指定資料庫,指定ODBC驅動程序。如果數據源有變化,就需要修改程序。如果在系統級別上,預先定義好數據源DSN,就可以避免這個麻煩。
在定義DSN的過程中,就已經指定好了數據源需要的ODBC驅動程序,也指定好了資料庫文件的實際路徑和名字,我們在程序中,只需要引用預先定義的數據源名DSN即可。
設定義好的DSN為test,則打開資料庫的方式為:
五、結束語
在ASP程序中,建立資料庫的連接和訪問資料庫,有很多方式和技術細節,在此難以一一詳述。實際上,對SQL Server資料庫,DBF資料庫,文本文件,電子表格文件等,也都可以很方便的打開和訪問,與對Access資料庫的訪問大同小異而已。如果說方便,Access應該是首選。如果考慮安全保密性,SQL資料庫更好些。使用系統數據源DSN的方式建立對資料庫的連接,具有更大的靈活性,也更簡便些。
2. 我的navicat for mysql 連接其他機器的資料庫,有時能連有時連不上
你ip都ping不通了,肯定連接不到mysql了,你telnet資料庫所在機器你的mysql埠,通而且指定ip有許可權連接該mysql,一般不會出現上述現象,中途斷掉可能是網路問題或者你設置的timeout超時。最幸運的莫過於你遇到mysql的編譯版本的BUG了,mysql自己編譯未加-fno-builtin該參數,mysql會有1/256的概率驗證通過你提交的錯誤信息,允許你連接,不在這1/256上就連不上了
3. mysql資料庫進行多數據源操作,一個可以連接,寫的第二個數據源連接不上
先用mysql客戶端連接一下看看有沒有問題,排除這個問題之後,再看mysql的埠是不是3306
4. java jdbc 連接資料庫斷開 有時候能連接上有時候連接不上 什麼原因
資料庫連接數的,所有的連接數都是有連接池管理的,有時候連不上有時候連不上是因為連接池有時候滿了,有的時候沒有滿,可以提供連接數,連接池可以理解為線程池,是需要釋放的,所以java中關於jdbc配置會配置超時時間
5. 請問資料庫連接的3種方法有哪3種啊
1、運行資料庫DSN
WinCC內部變數:@DatasourceNameRT,如:CC_MyTest_06_04_08_09_05_14R
2、普通連接的ConnectionString
(1)連接運行資料庫
strSQL="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CC_MyTest_06_04_08_09_05_14R;Data Source=.\WINCC"
(2)連接其它資料庫,如:Northwind
strSQL="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=.\WINCC"
註:普通連接方式下,所有標準的SQL語句都可以使用。
3、歸檔資料庫的ConnectionString
strSQL="Provider=WinCCOLEDBProvider.1;Catalog=CC_MyTest_06_04_08_09_05_14R;Data Source=.\WinCC"
在此連接方式下,只能用WinCCOLEDBProvider提供的方法訪問歸檔資料庫:
(1)單個歸檔變數查詢:(2)多個歸檔變數查詢:
6. VC 請問資料庫連接池中所謂的可用的連接是指什麼意思
差不多是這個意思,真正應用的時候,一般所謂的資料庫連接池可以用一個隊列來實現,系統初始化時一次性打開若干個連接,將有效的資料庫句柄push到隊列中,需要進行資料庫操作時,pop出一個,操作完之後再push回隊列。此外還可以作一些其它的功能增強,比如資料庫操作失敗時是否需要重新打開連接,或者給個操作失敗最大次數,失敗次數超過這個數再重新打開連接等等。
另外還要保證隊列的線程安全,因為可能同時有多個線程來申請使用資料庫連接。
所謂的可用連接也就是隊列里有效句柄的個數了。
至於連接無效,情況可能會比較多,除了網路異常之類的,也可能是伺服器主動切斷連接之類的,這些連接也可能是不可靠的,所以連接池要有重連機制。
7. 使用ADO連接sqlserver資料庫 在有的電腦可以 有的電腦連接不上是什麼原因
"\"在C語言的作用忘記了?如果資料庫存放位置是本機,建議使用127.0.0.1否則:如果是公網,則用域名,區域網則用IP最好是將連接字串寫在非EXE里,這樣方便發布和修改資料庫伺服器位置、帳號密碼還有,vc中連通前,你應該在mssql管理器中嘗試連接,如果在mssql管理器中都連接不能,則問題不出在VC中caseDATABASE_MSSQL:strcpy_s(data,"Driver={SQLServer};");strcat_s(data,"Server=");strcat_s(data,addr);if(addr[0]!='.')//如果伺服器地址使用".",則不能加埠{strcat_s(data,",");strcat_s(data,port);}strcat_s(data,";");strcat_s(data,"UID=");strcat_s(data,user);strcat_s(data,";");strcat_s(data,"PWD=");strcat_s(data,pwd);strcat_s(data,";");if(strlen(database)){strcat_s(data,"Database=");strcat_s(data,database);strcat_s(data,";");}上面是連接字元串生成代碼,下面是打開連接的函數intCAdoDataBase::Open(constchar*data){intret=0;memset(m_strLogin,0,1024);strcpy_s(m_strLogin,data);this->Lock();do{try{m_pConnection.CreateInstance(__uuidof(Connection));ret=m_pConnection->Open((_bstr_t)data,"","",adModeUnknown);m_bFlag=TRUE;ret=0;}catch(_com_errore){m_bFlag=FALSE;strcpy_s(m_strErrCode,e.Description());m_pConnection=NULL;ret=-1;}}while(FALSE);this->UnLock();returnret;}
8. 什麼是資料庫連接
資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對資料庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏。這項技術能明顯提高對資料庫操作的性能。
資料庫連接池在初始化時將創建一定數量的資料庫連接放到連接池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大資料庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。資料庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:
1) 最小連接數
是連接池一直保持的資料庫連接,所以如果應用程序對資料庫連接的使用量不大,將會有大量的資料庫連接資源被浪費;
2) 最大連接數
是連接池能申請的最大連接數,如果資料庫連接請求超過此數,後面的資料庫連接請求將被加入到等待隊列中,這會影響之後的資料庫操作。
3) 如果最小連接數與最大連接數相差太大,
那麼最先的連接請求將會獲利,之後超過最小連接數量的連接請求等價於建立一個新的資料庫連接。不過,這些大於最小連接數的資料庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時後被釋放。
9. 什麼是資料庫連接連接和會話之間有什麼關系
原理上和網站的一個session差不多,只是session是把key放在cookie裡面,資料庫連接是把key放在客戶端的library的內存里(比如.Net Sql Client)。對MS SQL來說,這個連接的協議叫TDS,底下可以走多種傳輸層協議,比如tcpip,也可以named pipe。而MySQL就又有自己的協議。當然在拿到key之前,先要走個authentication過程,比如Windows Authentication或者Sql authentication,過了authentication才會產生一個session key。如果是啟用SSL的話那麼整個連接上的數據流還會被加密,防止信息泄露或者中間人攻擊。