2016-11-02 10 views
2

現在、私はC#& asp.net Web OOPの学習中に非常に奇妙な問題に直面しています。 コードが正しいにもかかわらず、データをMicrosoft DBに挿入しないようにしても、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

例外がありますか? Registerメソッドをデバッグしましたか? – Badiparmagi

答えて

1

Useコマンド・パラメータは、それが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"); 

MUSTクエリと同じ順序でパラメータを定義しますので、OleDbCommandには名前付きパラメータはありません注意してください!

ここにはReserved words in MS Access - >Userが含まれていますので、あなたはそれをエスケープする必要があります。

コードのこの部分を削除して、例外を食べています!

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

このようにそれを書く:

catch 
{ 
    throw; 
} 

EDIT:同様@GordThompsonは、あなたがあまりにもそれをエスケープする必要がありますのでPasswordは、あまりにも予約語です!

+0

あなたのソリューションは、SQLインジェクションからの彼のアプローチを確実にするのに役立ちます。彼は直面している例外も同様に解決していますか? – RBT

+0

はい彼の問題は[ユーザー] – mybirthname

+0

@mybirthnameをエスケープしていません私は今、[ユーザー]を使用しようとしましたが、それでも私のアクセスデータベースに挿入できませんでした。 –

関連する問題