1

入力したユーザー名がまだ存在しないことを確認するには、次の方法があります。

protected void checkUsername(object source, ServerValidateEventArgs args)
{
    string connString = "Data Source=server;Initial Catalog=database;User Id=username;Password=password;";
    string cmdText = "SELECT COUNT(*) FROM igs_users WHERE username = @username";

    using(SqlConnection conn = new SqlConnection(connString))
    {
        conn.Open();
        using(SqlCommand cmd = new SqlCommand(cmdText, conn))
        {
            cmd.Parameters.AddWithValue("@username", username);
            Int32 count = (Int32)cmd.ExecuteScalar();

            args.IsValid = true;
        }
    }
}

実行すると、次のエラーが発生します。

System.ArgumentExceptionはユーザーコードによって処理されませんでしたHResult=-2147024809メッセージ=オブジェクトタイプSystem.Web.UI.WebControls.TextBoxから既知のマネージドプロバイダーネイティブタイプへのマッピングは存在しません。Source = System.Data

デバッガーは、以下の行に対してこのエラーを表示します。

Int32 count = (Int32)cmd.ExecuteScalar();

このコードの何が問題になっているのでしょうか。

4

1 に答える 1

4

私はそれがラインだと思います

cmd.Parameters.AddWithValue("@username", username);

usernameTextBoxですか?その場合は、行を次のように変更する必要があります。

cmd.Parameters.AddWithValue("@username", username.Text);

現在の行は、TextBoxコントロール自体を@usernameパラメーターにバインドしようとしています。修正により、TextBoxコントロール内のテキストがにバインドされます@username

于 2012-10-04T00:23:21.410 に答える