如何将变量插入到vb.net连接字符串中

时间:2011-01-11 20:43:30

标签: 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;

任何帮助都将非常感谢!!!

4 个答案:

答案 0 :(得分:4)

原始代码无效的原因是您使用以下内容:

"…"&user&"…"

第一个&没问题。但是第二个&在这种情况下是不明确的,因为&后面跟着的变量名在VB 1 中具有特殊含义。要使其工作,您需要在第二个&之前插入一个空格。

实际上,您应该始终每个二元运算符之前和之后插入空格。这只会使代码更具可读性。

"…" & user & "…"

现在代码有效了。但是在这里使用String.Format更具可读性。


1 真正的原因是,使用较旧的BASIC和VB版本(仍然使用Option Explicit Off,这是非常糟糕的样式!)变量不必声明。为了仍然可以说变量x属于给定类型,可以附加一个类型后缀。 &是VB6中Long的类型后缀(也可能在VB.NET中,但我还没有查找过。)

答案 1 :(得分:0)

根据db客户端提供程序,您可以使用OracleConnectionStringBuilder或SqlConnectionStringBuilder。 这些类将公共连接字符串字段公开为属性(如DataSource,Password等),它们是get; set;

答案 2 :(得分: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类以获取有关如何执行此操作的指示。

答案 3 :(得分:0)

我不确定我是否理解。您无法重复使用不同用户的连接。您将需要为要连接到数据库的每个用户建立新连接。如果您只是想简化格式化字符串本身,可以使用Nick的答案或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")