1

でエラーが発生しましたが、そのExecuteNonQuery理由が本当にわかりません。User私はウェブを検索するのに多くの時間を費やし、それが の間になければならないことに気付きました[]が、それは私の問題を解決していません.

else {
    DataTable table = new DataTable();
    string query = "SELECT * FROM [User] WHERE Email = '" + tbMail.Text + "'";
    OleDbDataAdapter adapter = new OleDbDataAdapter(query, connectionString);
    int count = adapter.Fill(table);
    if (count != 0)    {
        MessageBox.Show("This email is already in use", "Email in use", MessageBoxButtons.OK, MessageBoxIcon.Information);
    } else {
        OleDbConnection connection = new OleDbConnection(connectionString);
        OleDbCommand insertCommand = new OleDbCommand();
        adapter = new OleDbDataAdapter();

        string encryptedPassword = Convert.ToBase64String(System.Security.Cryptography.MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(tbPass.Text)));

        connection.Open();

        string command = "INSERT INTO [User] (Username, Password, Email) VALUES('" + tbUser.Text + "', '" + encryptedPassword + "', " + tbMail.Text + ")";
        insertCommand.Connection = connection;
        insertCommand.CommandText = command;
        adapter.InsertCommand = insertCommand;
        adapter.InsertCommand.ExecuteNonQuery();

        connection.Close();
    }
}

エラーは次のとおりです。

クエリの解析中にエラーが発生しました。[トークン行番号,トークン行オフセット,,エラーのトークン,,]"

4

1 に答える 1

2

メールの値は、ユーザー名とパスワードのように、引用符で囲む必要があります。

もう1つのポイントは、SQLインジェクション攻撃を防ぐためにSQLパラメータを使用する必要があるということです。

于 2013-01-14T16:47:54.427 に答える