2009-04-15 73 views
8

我有以下代碼:System.Data.SQLite參數問題

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

它執行完美,但是當我看到我的「brugere」表,它已經插入值:「@uNameParam」,「@ bNavnParam','@passwdParam','@pc_idParam','@noterParam','@licens_idParam'。而不是取代它們。

我試着做一個斷點並檢查參數,他們確實有正確的指定值。所以這也不是問題。

我一直在修補這個很多,沒有運氣,任何人都可以幫忙嗎?

哦,供參考,在這裏是從DBConnection的類OpenDB方法:

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

回答

29

您應該刪除你的周圍參數名稱引號中的INSERT語句。

所以不是

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

使用

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

對不起,不,我也試過。它會給出以下錯誤:「提供給命令的參數不足」 – CasperT 2009-04-15 11:12:29

2

感謝rwwilden和Jorge Villuendas,得到的答案是:

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

更換

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

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

1

當您使用System.Data.SqlClient,那麼你從System.Data.SqlDbType枚舉提供的參數類型。

如果你使用System.Data.SQLite那麼你必須使用**System.Data.DbType**枚舉。