我正在尝试将变量插入到我的连接字符串中,希望它们会被保存以执行多个查询。
我正在尝试的是这样的事情:
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;
“
任何帮助都将非常感谢!!!
答案 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会更为可取 - 您只需要覆盖UserID和Password属性(获取/设置),但这非常有用。
替代方案是启用集成安全性,并让用户登录到应用程序并使用模拟或使用其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")