2011-01-11 90 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")