2009-04-15 11 views
8

Tengo el siguiente código:System.Data.SQLite tema parámetro

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

Se ejecuta perfectamente, pero cuando veo mi mesa "Brugere", se ha insertado los valores: '@uNameParam', '@ bNavnParam ',' @passwdParam ',' @pc_idParam ',' @noterParam ',' @licens_idParam 'literalmente. En lugar de reemplazarlos.

He intentado hacer un punto de interrupción y he comprobado los parámetros, tienen los valores asignados correctos. Entonces ese tampoco es el problema.

He estado jugando con esto mucho ahora, sin suerte, ¿alguien puede ayudar?

Ah, y para referencia, aquí está el método de la clase OpenDB DBConnection:

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

Respuesta

29

debería quitar las comillas alrededor de los nombres de los parámetros en la sentencia INSERT.

Así que en lugar de

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

uso

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

Lo siento, no, lo intenté también. Daría el siguiente error: "Parámetros insuficientes suministrados al comando" – CasperT

+0

Ah, veo su problema. No todos los nombres de parámetros son iguales: @uNavnParam versus @uNameParam. Es un simple error tipográfico :) –

+0

Y aún debería eliminar las comillas simples alrededor de sus parámetros. –

2

Gracias a rwwilden y Jorge Villuendas, la respuesta es:

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

reemplazar

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

con

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

1

Cuando se utiliza System.Data.SqlClient entonces usted proporciona tipos de parámetros de System.Data.SqlDbType enumeración.

Pero si utiliza System.Data.SQLite entonces usted tiene que utilizar **System.Data.DbType** enumeración.