如何将变量插入到vb.net连接字符串
我试图插入变量到我的连接字符串希望他们将被保存执行多个查询。如何将变量插入到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;
“
任何帮助将不胜感激!
为什么你原来的代码是不工作的原因是,你使用下列内容:
"…"&user&"…"
第一个&
没问题。但是第二个&
在这种情况下是不明确的,因为变量名称紧跟在后面的是&
在VB 中具有特殊含义。要做到这一点,你需要在第二个&
之前插入一个空格。
实际上,你应该在总是之前和之后插入空格每二元运算符。这只是使代码无限可读。
"…" & user & "…"
现在的代码有效。但使用String.Format
在这里更具可读性。
真正的原因是,与旧的BASIC和VB版本(并仍然使用Option Explicit Off
,这是非常不好的风格!)变量没有被宣布。为了仍然可以说变量x
是给定类型的,可以附加一个类型后缀。 &
是VB6中Long
的类型后缀(也可能在VB.NET中,但我没有查到它)。
根据DB客户端提供商可以使用OracleConnectionStringBuilder或SqlConnectionStringBuilder。 这些类暴露常见的连接字符串字段属性(如数据源,密码等),这是得到;设置;
我不是完全遵循你想要做的,但在我看来,使用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类,了解如何执行此操作的指针。
林不知道,如果我明白。您不能重复使用与不同用户的连接。您将需要为每个要连接到数据库的用户建立一个新连接。如果你只是想使它更容易字符串格式本身,你可以使用尼克的回答是或的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")
非常感谢你们!这是一个多用户应用程序,但每个用户都将拥有自己的Teradata登录。这将工作吗?我想要一个登录表单并将txtboxes中的数据存储到字符串中并在连接字符串中重用。 – gfuller40 2011-01-12 14:14:44
如果你要保留它以便重用,你也应该检查SecureString。将密码以易读的格式留在内存中并不是真正的最佳做法。 – BenAlabaster 2011-01-12 18:01:29