Ich versuche, einen Benutzer in einer Datenbank basierend auf einer Anmeldung auf dem SQL Server-Stamm zu erstellen, aber ich bekomme immer Syntaxfehler. Ich sehe kein Problem in dieser einfachen Abfrage, es sei denn, SqlCommand
erfordert eine andere Art von Syntax als tatsächliche T-SQL in SSMS tut.Falsche Syntax in der Nähe von GO (Erstellen von Benutzern basierend auf der Anmeldung)
var cmd = new SqlCommand("USE " + databaseName + " GO CREATE USER [" + txtUser.Text + "] FOR LOGIN ["
+ txtUser.Text + "] GO", conn);
Meine Verbindungszeichenfolge wie folgt aussieht
private string GetConnectionString(string initialCatalog = "")
{
return "Data Source=" + txtInstance.Text.Trim() + ";User ID=" + txtUser.Text.Trim() +
";" + (initialCatalog != "" ? "Initial Catalog=" + initialCatalog : "")
+ "Password=" + txtPass.Text.Trim() + ";Network Library=dbmssocn;";
}
ich es nicht bin vorbei ein initialCatalog
Ich versuche haben die USE
Anweisung vom eigentlichen Befehl Text zu entfernen und stattdessen den DB-Name passt am besten zu GetConnectionString
Methode, um es als den ursprünglichen Katalog zu setzen, aber dann bekomme ich Anmeldung fehlgeschlagen für Benutzer x
Ich nehme an, dies ist, weil der Benutzer nicht in der angegebenen Datenbank ist. Angesichts der Tatsache, dass Benutzer x ist ein Login auf SQL-Server mit vollen Rechten, wie kann ich einen Benutzer in einer Datenbank innerhalb SQL-Server mit dieser Anmeldung mit vollen Rechten verbunden erstellen?
EDIT
ich weiß, dass mein Code-Injection-Angriffe anfällig ist; Dies ist jedoch eine interne Helfer-App, die ich wahrscheinlich nur verwenden werde.
, die nicht zu arbeiten schien. Am Ende habe ich Andys Antwort benutzt. Hoffte, alles in einem "ExecuteNonQuery" zu bekommen, aber es ist nicht wichtig für eine kleine App wie diese – Adrian
'GO' ist eine Funktion von Sql Management Studio, es ist nicht Teil von Tsql. Sie müssen manuell von Hand in Chargen aufgeteilt werden. Sie müssen nicht 'SqlCommand'-Objekte trennen, Sie können dasselbe verwenden, aktualisieren Sie einfach die' cmd.CommandText'-Eigenschaft und rufen dann 'ExecuteNonQuery' auf. –
Sie können auch [' SqlConnectionStringBuilder'] finden (https: // msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder(v=vs.110).aspx) zuverlässiger zum Erstellen von Verbindungszeichenfolgen als die Zeichenfolgeneindämmung, Sie möchten möglicherweise nachsehen. –