运行时设置数据库连接字符串
數據庫連接字符串這個東西復雜倒不是很復雜,我們用的時候用到的屬性也沒幾個,就什么“Provider”、“Initial Catalog”、“data source” (Provider不同,當然設置也有所不同)等等,再加用戶名、密碼。可就是比較的煩一點。如果在運行時能夠調出我們在設計時用的那個設置連接字符串對話框就事半功倍了。在Delphi里這非常的簡單,在Delphi的ADODB單元里已經封裝了相應的方法,只要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
總結
以上是生活随笔為你收集整理的运行时设置数据库连接字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Clojure Web开发实战》——第
- 下一篇: SQL老黄牛