2009-04-15 9 views
8

Ich habe den folgenden Code:System.Data.SQLite Parameter Ausgabe

try 
{ 
    //Create connection 
    SQLiteConnection conn = DBConnection.OpenDB(); 

    //Verify user input, normally you give dbType a size, but Text is an exception 
    var uNavnParam = new SQLiteParameter("@uNavnParam", SqlDbType.Text) { Value = uNavn }; 
    var bNavnParam = new SQLiteParameter("@bNavnParam", SqlDbType.Text) { Value = bNavn }; 
    var passwdParam = new SQLiteParameter("@passwdParam", SqlDbType.Text) {Value = passwd}; 
    var pc_idParam = new SQLiteParameter("@pc_idParam", SqlDbType.TinyInt) { Value = pc_id }; 
    var noterParam = new SQLiteParameter("@noterParam", SqlDbType.Text) { Value = noter }; 
    var licens_idParam = new SQLiteParameter("@licens_idParam", SqlDbType.TinyInt) { Value = licens_id }; 

    var insertSQL = new SQLiteCommand("INSERT INTO Brugere (navn, brugernavn, password, pc_id, noter, licens_id)" + 
    "VALUES ('@uNameParam', '@bNavnParam', '@passwdParam', '@pc_idParam', '@noterParam', '@licens_idParam')", conn); 
    insertSQL.Parameters.Add(uNavnParam); //replace paramenter with verified userinput 
    insertSQL.Parameters.Add(bNavnParam); 
    insertSQL.Parameters.Add(passwdParam); 
    insertSQL.Parameters.Add(pc_idParam); 
    insertSQL.Parameters.Add(noterParam); 
    insertSQL.Parameters.Add(licens_idParam); 
    insertSQL.ExecuteNonQuery(); //Execute query 

    //Close connection 
    DBConnection.CloseDB(conn); 

    //Let the user know that it was changed succesfully 
    this.Text = "Succes! Changed!"; 
} 
catch(SQLiteException e) 
{ 
    //Catch error 
    MessageBox.Show(e.ToString(), "ALARM"); 
} 

Sie führt perfekt, aber wenn ich meine "Brugere" Tabelle zu sehen, hat es die Werte eingefügt: '@uNameParam', ‚@ bNavnParam ',' @passwdParam ',' @pc_idParam ',' @noterParam ',' @licens_idParam 'wörtlich. Anstatt sie zu ersetzen.

Ich habe versucht, einen Haltepunkt zu machen und überprüfte die Parameter, sie haben die korrekten zugewiesenen Werte. Das ist also auch nicht das Problem.

Ich habe jetzt mit viel Glück daran herumgebastelt, kann mir niemand helfen?

Oh und als Referenz, hier ist die OpenDB Methode aus der DBConnection Klasse:

public static SQLiteConnection OpenDB() 
{ 
    try 
    { 
     //Gets connectionstring from app.config 
     const string myConnectString = "data source=data;"; 

     var conn = new SQLiteConnection(myConnectString); 
     conn.Open(); 
     return conn; 
    } 

    catch (SQLiteException e) 
    { 
     MessageBox.Show(e.ToString(), "ALARM"); 
     return null; 
    } 
} 

Antwort

29

Sie sollen die Anführungszeichen um Ihre Parameternamen in der INSERT-Anweisung entfernen.

Also statt

VALUES ('@uNameParam', '@bNavnParam', '@passwdParam', '@pc_idParam', 
     '@noterParam', '@licens_idParam') 

Verwendung

VALUES (@uNameParam, @bNavnParam, @passwdParam, @pc_idParam, 
     @noterParam, @licens_idParam) 
+0

Sorry, nein, das habe ich auch versucht. Es würde den folgenden Fehler geben: "Unzureichende Parameter, die an den Befehl geliefert wurden" – CasperT

+0

Ah, ich sehe Ihr Problem. Nicht alle Parameternamen sind gleich: @uNavnParam gegen @uNameParam. Es ist ein einfacher Tippfehler :) –

+0

Und Sie sollten immer noch die einfachen Anführungszeichen um Ihre Parameter entfernen. –

2

Dank rwwilden und Jorge Villuendas, lautet die Antwort:

var insertSQL = new SQLiteCommand("INSERT INTO Brugere (navn, brugernavn, password, pc_id, noter, licens_id)" + 
" VALUES (@uNavnParam, @bNavnParam, @passwdParam, @pc_idParam, @noterParam, @licens_idParam)", conn); 
insertSQL.Parameters.AddWithValue("@uNavnParam", uNavn); 
insertSQL.Parameters.AddWithValue("@bNavnParam", bNavn); 
insertSQL.Parameters.AddWithValue("@passwdParam", passwd); 
insertSQL.Parameters.AddWithValue("@pc_idParam", pc_id); 
insertSQL.Parameters.AddWithValue("@noterParam", noter); 
insertSQL.Parameters.AddWithValue("@licens_idParam", licens_id); 

insertSQL.ExecuteNonQuery(); //Execute query 
0

ersetzen

VALUES ('@uNameParam', '@bNavnParam', '@passwdParam', '@pc_idParam', '@noterParam', '@licens_idParam')

Sie Parametertypen von System.Data.SqlDbType Aufzählung liefern

mit

VALUES (?, ?, ?, ?, ?, ?)

1

Wenn Sie System.Data.SqlClient verwenden dann.

Aber wenn Sie System.Data.SQLite verwenden, dann haben Sie **System.Data.DbType** Aufzählung verwenden.

Verwandte Themen