2016-11-02 89 views
2

目前我正面臨一個非常奇怪的問題,在我的c#& asp.net web OOP學習。 我已經編寫了插入數據到Microsoft Access的代碼,無論我如何嘗試數據將永遠不會插入到我的數據庫中,雖然代碼是正確的。無法插入數據沒有任何錯誤

不知何故,在其他項目中,我用同樣的方法做的工作是... 希望有人可以在這裏幫助。謝謝。

using System.Data.OleDb; 
public class DataBaseCon 
{ 
    private static OleDbConnection GetConn() 
    { 
     string ConString; 
     ConString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=‪C:\Users\user\Desktop\YogaDB.accdb"; 
     return new OleDbConnection(ConString); 
    } 

    public static void Register(string un, string pw, DateTime dob, int ye, string hissue, string email, string contact) 
    { 
     OleDbConnection myConnection = GetConn(); 
     string myQuery = "INSERT INTO User(Username, Password, DateOfBirth, YogaExp, HealthIssue, Email, Contact, UserType) VALUES ('" + un + "' , '" + pw + "' , '" + dob + "' , '" + ye + "', '" + hissue + "' , '" + email + "', '" + contact + "', 'student')"; 
     OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection); 

     try 
     { 
      myConnection.Open(); 
      myCommand.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Exception in DBHandler", ex); 
     } 
     finally 
     { 
      myConnection.Close(); 
     } 
    } 

} 

按鈕功能在這裏:

protected void RegisterBtn_Click(object sender, EventArgs e) 
     { 
      string un = TextBox1.Text; 
      string pw = TextBox2.Text; 
      DateTime dob = Calendar1.SelectedDate; 
      int ye = int.Parse(TextBox4.Text); 
      string hissue = TextBox5.Text; 
      string email = TextBox6.Text; 
      string contact = TextBox7.Text; 
      DataBaseCon.Register(un, pw, dob, ye, hissue, email, contact); 
      Label8.Text = "Congratulation "+ un +" , success to register!"; 
     } 
+1

你有什麼異常? – Pikoh

+3

**警告** yoru代碼極易受sql注入攻擊。 –

+1

有什麼異常,錯誤?你有沒有調試註冊方法? – Badiparmagi

回答

1

使用命令參數它會保護你免受SQL注入,你也將避免這樣的問題。用戶是Access中的保留字,因此您應該像這樣跳過它[User]

string myQuery = @" 
       INSERT INTO 
        [User] (Username, [Password], DateOfBirth, YogaExp, HealthIssue, Email, Contact, UserType) 
       VALUES (@UserName, @Password, @DateOfBirth, @YogaExp, @HealthIssue, @Email, @Contact, @UserType)"; 

OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection); 

myCommand.Parameters.AddWithValue("@UserName", un); 
myCommand.Parameters.AddWithValue("@Password", pw); 
myCommand.Parameters.AddWithValue("@DateOfBirth", dob); 
myCommand.Parameters.AddWithValue("@YogaExp", ye);  
myCommand.Parameters.AddWithValue("@HealthIssue", hissue); 
myCommand.Parameters.AddWithValue("@Email", email);  
myCommand.Parameters.AddWithValue("@Contact", contact); 
myCommand.Parameters.AddWithValue("@UserType", "student"); 

注意存在OleDbCommand沒有命名的參數,所以你MUST定義相同的順序參數查詢!

這裏是Reserved words in MS Access - >User是他們的一部分,所以你應該逃避它!

刪除這部分代碼,你正在吃你的例外!

catch (Exception ex) 
{ 
    Console.WriteLine("Exception in DBHandler", ex); 
} 

寫這樣的:

catch 
{ 
    throw; 
} 

編輯:像@GordThompson說Password保留字,所以你應該逃避它呢!

+0

您的解決方案可幫助OP確保他的SQL注入方法。它是否也解決了他面臨的異常? – RBT

+0

是的,他的問題不是逃避[User] – mybirthname

+0

@mybirthname我試過使用[User],它仍然無法插入我的訪問數據庫。 –

相關問題