2013-04-01 74 views
0

我與Access數據庫的工作,我有一個用戶表。插入查詢到Access C#

我有一個插入查詢:

DataBase.Execute("Insert into Users(UserID,FirstName,SecondName,UserName,Password,Permission) Values(" + 
    obj.PersonID + 
    ",'" + obj.FirstName + 
    "','" + obj.LastName + 
    "','" + username + 
    "','" + psw + 
    "'," + permission + ")"); 

我檢查了所有的參數值,它們與表的那些一樣...但它說,有我的INSERT查詢語法錯誤。

+0

請幫我傢伙! – ranifisch

+0

是用戶ID自動編號或不? –

+0

@ranifisch你應該使用參數 - 它應該可以幫助您避免此類問題 – Alex

回答

0

參數,參數,參數。你的代碼的第一個好處,你忘記了單引號。其次,您避免了可怕的SQL注入漏洞。第三,你的代碼將更容易閱讀。試想一下:

string insertQuery = "INSERT INTO table (field1, field2, field3) VALUES (@par1, @par2, @par3)"; 
Database.Execute(insertQuery, var1, var2, var3); 

其中VAR1VAR2VAR3是包含你需要插入值的變量。

有一個簡單(但糟糕的是,因爲它仍然容易受到SQL注入)的解決方案,這將使你的代碼更比你張貼的例子更具可讀性:的String.Format。取而代之的是:

DataBase.Execute("Insert into Users(UserID,FirstName,SecondName,UserName,Password,Permission) Values(" + 
obj.PersonID + 
",'" + obj.FirstName + 
"','" + obj.LastName + 
"','" + username + 
"','" + psw + 
"'," + permission + ")"); 

你可以做這樣的事情,更清晰,更難以忘記一些簡單的報價:

string query = string.Format("Insert into Users (UserID,FirstName,SecondName,UserName,Password,Permission) Values({0}, '{1}', '{2}', '{3}', '{4}', {5})", obj.PersonID, obj.FirstName, obj.LastName, username, psw, permission); 
Database.Execute(query); 

認爲這是對插入參數的使用的一個簡單的例子:http://msdn.microsoft.com/en-us/library/webmatrix.data.database.execute(v=vs.111).aspx