2012-04-19 22 views
2
public void RegisterUser(string passw,string uname ,string fname ,string lname, string email) 
{ 
    string strSql = @"INSERT INTO User (passw,uname,fname,lname,email) values ('" + passw + "','" + uname + "','" + fname + "','" + lname + "','" + email + "')";               
    cn.Open(); 
    OleDbCommand cmd = new OleDbCommand(strSql,cn); 
    int yy= cmd.ExecuteNonQuery(); 
    cn.Close(); 
    cn.Dispose(); 

} 

は関係なく、私は同じエラーに を得るのですかどのような誰もがここで間違って何かを見ていないのでしょうか? またはこの問題を解決する別の創造的な方法があります ありがとうSystem.Data.OleDb.OleDbException:INSERT INTOステートメントの構文エラー

+4

パラメータ化されたコマンドを使用すると、より安全です。http://msdn.microsoft.com/en-us/library/yy6y35y8(v=vs.80).aspx – Fabio

+0

クエリ文字列の内容を印刷したり、 ? –

+3

O'Malleyの姓ですか? –

答えて

6

ここであなたのコードは、ユーザーの入力に応じて動的に変更することができます。それがエラーの原因です。

あなたの入力フィールドにapql [']が含まれていてsqlブレイクが含まれていて閉じられていない引用符がある場合は説明しましょう。

また、コードはSQLインジェクション攻撃に公開されています。

パラメータをパラメータとして渡すことは、差別的に扱われ、安全であり、SQLインジェクションを妨げることをお勧めします。

public void RegisterUser(string passw,string uname ,string fname ,string lname, string email) 
{ 
    string strSql = @"INSERT INTO User (passw,uname,fname,lname,email) values  (@passw,@uname,@fname,@lname,@email)";               
    cn.Open(); 
    OleDbCommand cmd = new OleDbCommand(strSql,cn); 
    cmd.Parameters.AddWithValue("@passw",passw); 
    cmd.Parameters.AddWithValue("@uname",uname); 
    cmd.Parameters.AddWithValue("@fname",fname); 
    cmd.Parameters.AddWithValue("@lname",lname); 
    cmd.Parameters.AddWithValue("@email",email); 
    int yy= cmd.ExecuteNonQuery(); 
    cn.Close(); 
    cn.Dispose(); 
} 
+0

ようこそ。それが本当に助けになったならば、この答えの左側に(右の)記号を記入して答えを受け入れることができます。 – Deb

0

Oracleでは、userは予約語であり、INSERT INTO User ...ORA-00903: invalid table nameを生成します。

関連する問題