2011-01-11 111 views
2

我試圖插入變量到我的連接字符串希望他們將被保存執行多個查詢。如何將變量插入到vb.net連接字符串

我想要是這樣的:

Private sConnectionString As String = "Provider=TDOLEDB;Data Source=TDDEV;Persist Security Info=True;User ID="&user&";Password="&pass&";Default Database=bcpm_ddbo;Session Mode=ANSI;" 

,但它不工作。

OR

我不介意做一些像下面,但只有一個提示,並留下連接打開?

Private sConnectionString As String = "Provider=TDOLEDB;Data Source=TDDEV;Persist Security Info=True;Prompt=Complete;Default Database=bcpm_ddbo;Session Mode=ANSI; 

任何幫助將不勝感激!

回答

3

爲什麼你原來的代碼是不工作的原因是,你使用下列內容:

"…"&user&"…" 

第一個&沒問題。但是第二個&在這種情況下是不明確的,因爲變量名稱緊跟在後面的是&在VB 中具有特殊含義。要做到這一點,你需要在第二個&之前插入一個空格。

實際上,你應該在總是之前和之後插入空格二元運算符。這只是使代碼無限可讀。

"…" & user & "…" 

現在的代碼有效。但使用String.Format在這裏更具可讀性。


真正的原因是,與舊的BASIC和VB版本(並仍然使用Option Explicit Off,這是非常不好的風格!)變量沒有被宣佈。爲了仍然可以說變量x是給定類型的,可以附加一個類型後綴。 &是VB6中Long的類型後綴(也可能在VB.NET中,但我沒有查到它)。

0

根據DB客戶端提供商可以使用OracleConnectionStringBuilder或SqlConnectionStringBuilder。 這些類暴露常見的連接字符串字段屬性(如數據源,密碼等),這是得到;設置;

0

我不是完全遵循你想要做的,但在我看來,使用String.Format會解決部分方法來解決您的問題 - 建立一個格式:

Private sConStrFormat As String = "Provider=TDOLEDB;Data Source=TDDEV;Persist Security Info=True;User ID={0};Password={1};Default Database=bcpm_ddbo;Session Mode=ANSI;" 

我會認爲你會讀你的連接字符串的格式,從您的配置文件(的app.config/web.config中),所以你會在裏面定義的格式和然後使用String.Format推入正確的用戶名和密碼。

然後,當你想使用它,你只是做:

Dim UserName As String = "MyUserName" 
Dim Password As String = "MyPassword" 
sConStr = String.Format(sConStrFormat, UserName, Password) 
Using Con As SqlConnection = new SqlConnection(sConStr) 
    Con.Open 
    'Do whatever you need with your open connection... 
End Using 
'.... 

這是否你在尋找什麼?替代ConnectionStringBuilder會更可取 - 您只需要覆蓋UserIDPassword屬性(即獲取/設置),但這是完全可用的。

替代方法是啓用集成安全性,讓用戶登錄到應用程序並使用模擬或使用他們的Windows身份與數據庫進行交互。查看System.Security.Principal命名空間和WindowsIdentity類,瞭解如何執行此操作的指針。

+0

非常感謝你們!這是一個多用戶應用程序,但每個用戶都將擁有自己的Teradata登錄。這將工作嗎?我想要一個登錄表單並將txtboxes中的數據存儲到字符串中並在連接字符串中重用。 – gfuller40 2011-01-12 14:14:44

+0

如果你要保留它以便重用,你也應該檢查SecureString。將密碼以易讀的格式留在內存中並不是真正的最佳做法。 – BenAlabaster 2011-01-12 18:01:29

0

林不知道,如果我明白。您不能重複使用與不同用戶的連接。您將需要爲每個要連接到數據庫的用戶建立一個新連接。如果你只是想使它更容易字符串格式本身,你可以使用尼克的回答是或的String.format:

Dim format As String = "Provider=TDOLEDB;Data Source=TDDEV;Persist Security Info=True;User ID={0};Password={1};Default Database=bcpm_ddbo;Session Mode=ANSI;" 
Dim connectionString1 As String = String.Format(format, "some username", "some password") 
Dim connectionString2 As String = String.Format(format, "another username", "another password") 
相關問題