日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

运行时设置数据库连接字符串

發布時間:2023/12/16 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 运行时设置数据库连接字符串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據庫連接字符串這個東西復雜倒不是很復雜,我們用的時候用到的屬性也沒幾個,就什么“Provider”、“Initial Catalog”、“data source (Provider不同,當然設置也有所不同)等等,再加用戶名、密碼。可就是比較的煩一點。如果在運行時能夠調出我們在設計時用的那個設置連接字符串對話框就事半功倍了。在Delphi里這非常的簡單,在DelphiADODB單元里已經封裝了相應的方法,只要uses adodb ,然后

edit1.Text := adodb.PromptDataSource(handle,edit1.Text);

連接字符串就在那個edit1里了。

Delphi里如此簡單的東東,到了.NET里是如何做的呢?在MSDN里翻了半天愣是沒發現。不過想想它們設置連接字符串時調出來的窗口跟以前是一樣的,用的應該是相同的東西(翻舊的MSDN可能有)。后來還是在CodeProject(http://www.codeproject.com/cs/database/DataLinks.asp )里找到了方法,果然不出所料是舊東西翻新的。代碼量比Delphi里多一點點,不過也是很簡單。

先加引用,一個是adodb.dll($Program Files$"Microsoft.NET"Primary Interop Assemblies",這個在添加引用里就有),一個是oledb32.dll($Program Files$"Common Files"System"Ole DB",這個要點“瀏覽”按鈕去選)

基本代碼如下:

?????????? ???? MSDASC.DataLinks datalinks = new MSDASC.DataLinksClass();

?????????? ???? ADODB._Connection tmpconc = new ADODB.ConnectionClass();

???????????????

?????????? ???? if (TextDbstr.Text == String.Empty) {

??????????????? ???? tmpconc = (ADODB._Connection)datalinks.PromptNew();

??????????????? ???? TextDbstr.Text = tmpconc.ConnectionString;

?????????? ???? }else{

??????????????? ???? Object oconc = tmpconc;

??????????????? ???? tmpconc.ConnectionString = TextDbstr.Text;

??????????????? ???? if (datalinks.PromptEdit(ref oconc))

??????????????? ???? ???? TextDbstr.Text = tmpconc.ConnectionString;

????? ???? }

如果你用的是OleDbConnection,就可以用上面得到的字符串當作ConnectionString了,但如果你用的是SqlConnection如果直接用的話,連接時會拋出System.ArgumentException: 說不支持關鍵字: provider”。顯然對SqlConnection來說provider是定的,所以對連接字符串來說這一項設置多余了(我們在VS.NET中設計時也能看到它的連接串是沒有provider)。那么我們在上面產生的連接字符串就不能直接用了。作簡單的處理就可以了(就是去除provider部分)

下面是測試代碼:

OleDbConnection:

?????????? ???? OleDbConnection connection = new OleDbConnection();

?????????? ???? try{

??????????????? ???? connection.ConnectionString = TextDbstr.Text;

??????????????? ???? connection.Open();

??????????????? ???? MessageBox.Show("Connection OK");//OleDbConnection下正常連接

?????????? ???? }catch (Exception ex){

??????????????? ???? MessageBox.Show(ex.ToString());

?????????? ???? }finally{

??????????????? ???? connection.Close();

????? ???? }

SqlConnection沒有作任何處理時:

?????????? ???? SqlConnection connection = new SqlConnection();

?????????? ???? try{

??????????????? ???? connection.ConnectionString = TextDbstr.Text;

??????????????? ???? connection.Open();

??????????????? ???? MessageBox.Show("Connection OK");

?????????? ???? }catch (Exception ex){

??????????????? ???? MessageBox.Show(ex.ToString());//Sqlconnection時,直接用的話會拋出System.ArgumentException

?????????? ???? }finally{

??????????????? ???? connection.Close();

????? ???? }

作了相應處理后正常了:

?????????? ???? SqlConnection connection = new SqlConnection();

?????????? ???? try{

??????????????? ???? int pos = TextDbstr.Text.IndexOf(";");//偷了個懶,系統產生的連接字符串,在第一個分號前的就是provider部分

??????????????? ???? string constr = TextDbstr.Text.Remove(0,pos);

??????????????? ???? connection.ConnectionString = constr;

??????????????? ???? connection.Open();

??????????????? ???? MessageBox.Show("Connection OK");//這下正常了

?????????? ???? }catch (Exception ex) {

??????????????? ???? MessageBox.Show(ex.ToString());

?????????? ???? }finally{

??????????????? ???? connection.Close();

????? ???? }

轉載于:https://www.cnblogs.com/vcool/archive/2007/11/13/957606.html

總結

以上是生活随笔為你收集整理的运行时设置数据库连接字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。