2011-01-11 7 views
2

Ich versuche, Variablen in meine Verbindungszeichenfolge in der Hoffnung, dass sie zum Ausführen mehrerer Abfragen gespeichert werden.wie Variablen in vb.net Verbindungszeichenfolge einfügen

Was ich versuche ist so etwas wie dieses:

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;" 

aber es funktioniert nicht.

ODER

Ich würde so etwas wie unten nichts dagegen tun, aber nur eine schnelle und lassen Sie die Verbindung offen?

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

"

jede Hilfe wäre sehr dankbar !!!

Antwort

3

Der Grund, warum Sie Ihre Original-Code nicht funktioniert, ist, dass Sie die folgende verwenden:

"…"&user&"…" 

Die erste & ist in Ordnung. Aber die zweite & ist in diesem Fall mehrdeutig, weil ein Variablenname unmittelbar gefolgt durch eine & hat eine spezielle Bedeutung in VB . Um dies zu ermöglichen, müssen Sie vor dem zweiten einen Whitespace einfügen &.

In der Tat, sollten Sie immer Einsatz Leerzeichen vor und nach jeder Binäroperators. Dies macht den Code einfach lesbarer.

"…" & user & "…" 

Jetzt funktioniert der Code. Aber mit String.Format ist hier noch lesbarer.


Der wahre Grund ist, dass bei älteren BASIC und VB-Versionen (und immer noch mit Option Explicit Off, die sehr schlechten Stil ist!) Variablen nicht deklariert werden mußte. Um immer noch die Möglichkeit zu haben, zu sagen, dass die Variable x von einem gegebenen Typ ist, könnte man ein Typssuffix anhängen. & ist der Typ Suffix für in VB6 (und wahrscheinlich auch in VB.NET, aber ich habe nicht nachgeschlagen).

+0

Ich zweite mit 'String.Format' statt Verkettung. –

+0

Aber im "String.Format" soll ein Benutzername und ein Passwort angegeben werden - diese sind serverseitig eingestellt und können nicht fest in die App kodiert werden, da sie alle drei Monate von mindestens 10 Benutzern geändert werden müssen . - Konrad, ich schätze die Erklärung sehr! – gfuller40

+0

@gfuller: nichts muss hart codiert werden. 'String.Format' kann Variablen einfach verwenden. –

0

auf db-Client-Anbieter Je Sie OracleConnectionStringBuilder oder SqlConnectionStringBuilder verwenden können. aussetzen Diese Klassen gemeinsamen Verbindungszeichenfelder als Eigenschaften (wie Datasource , Password etc), die bekommen sind; set;

0

Ich bin nicht genau das, was Sie versuchen zu tun, aber es scheint mir, dass die Verwendung von String.Format gehen würde, um Weg zu lösen Ihr Problem - baut ein 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;" 

Ich würde davon ausgehen, dass Sie Ihre Verbindung String-Format in Ihrer Konfigurationsdatei (app.config/web.config) würden zu lesen, so dass Sie das Format dort definieren würden und Verwenden Sie anschließend String.Format, um den richtigen Benutzernamen und das richtige Passwort einzugeben.

Dann, wenn Sie es verwenden möchten, tun Sie gerade:

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 
'.... 

Heißt das tun, was Sie suchen? Die Alternative ConnectionStringBuilder wäre mehr vorzuziehen - Sie müssen nur die UserID und Password Eigenschaften (die Get/Set sind) überschreiben, aber das ist perfekt verwendbar.

Alternativen sind, integrierte Sicherheit zu aktivieren und den Benutzer in der Anwendung anmelden und Identitätswechsel verwenden oder ihre Windows-Identität für ihre Interaktion mit der Datenbank verwenden. Überprüfen Sie den System.Security.Principal-Namespace und die WindowsIdentity-Klasse für Hinweise, wie dies zu tun ist.

+0

Vielen Dank, Leute! Es ist eine Multi-User-App, aber jeder Benutzer hat sein eigenes Teradata-Login. Wird das damit funktionieren? Ich möchte ein Login-Formular haben und speichern Sie die Daten aus den Txtboxen zu string und wieder hier in der Verbindungszeichenfolge. – gfuller40

+0

Sie sollten sich SecureString wahrscheinlich auch ansehen, wenn Sie es für die Wiederverwendung bereithalten. Das Passwort in einem leicht lesbaren Format im Speicher herumlaufen zu lassen, ist nicht wirklich das Beste, was zu tun ist. – BenAlabaster

+0

@ gfuller40 Gern geschehen, froh, dass wir helfen konnten – BenAlabaster

0

Ich bin nicht sicher, ob ich das verstehe. Sie können eine Verbindung mit verschiedenen Benutzern nicht wiederverwenden. Sie benötigen für jeden Benutzer, den Sie mit der Datenbank verbinden möchten, eine neue Verbindung. Wenn Sie nur versuchen zu machen einfacher ist es, die Zeichenfolge selbst zu formatieren, können Sie Nick Antwort oder string.Format verwenden:

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") 
Verwandte Themen