2009-04-15 96 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**枚举。