0

reader = cmd.ExecuteReader();デバッグ時に例外がスローされます。

CS0266: 型 'System.IAsyncResult' を 'System.Data.SqlClient.SqlDataReader' に暗黙的に変換することはできません。

これは、MSDN サンプル メンバーシップ プロバイダー (http://msdn.microsoft.com/en-us/library/6tc47t75.aspx) から派生したカスタム MembershipProvider であり、ユーザー名の値は個別のユーザー名エントリではなく電子メール データベース フィールドを呼び出します。接続が Odbc から SQL 接続に変更されました。

    public override MembershipUser GetUser(string username, bool userIsOnline)
    {
        SqlConnection conn = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand("SELECT UserID, Email, PasswordQuestion," +
            " Comment, IsApproved, IsLockedOut, CreationDate, LastLoginDate," +
            " LastActivityDate, LastPasswordChangedDate, LastLockedOutDate" +
            " FROM Users WHERE Email = ? AND ApplicationName = ?", conn);

        cmd.Parameters.Add("@Email", SqlDbType.NVarChar, 128).Value = username;
        cmd.Parameters.Add("@ApplicationName", SqlDbType.NVarChar, 255).Value = m_ApplicationName;

        MembershipUser u = null;
        SqlDataReader reader = null;

        try
        {
            conn.Open();

            reader = cmd.ExecuteReader();

            if (reader.HasRows)
            {
                reader.Read();
                u = GetUserFromReader(reader);

                if (userIsOnline)
                {
                    SqlCommand updateCmd = new SqlCommand("UPDATE Users " +
                        "SET LastActivityDate = ? " +
                        "WHERE Email = ? AND Applicationname = ?", conn);

                    updateCmd.Parameters.Add("@LastActivityDate", SqlDbType.DateTime).Value = DateTime.Now;
                    updateCmd.Parameters.Add("@Email", SqlDbType.VarChar, 255).Value = username;
                    updateCmd.Parameters.Add("@ApplicationName", SqlDbType.VarChar, 255).Value = m_ApplicationName;

                    updateCmd.ExecuteNonQuery();
                }
            }

        }
4

2 に答える 2

1

sqlcommand内でパラメーター名を指定しようとしましたか?疑問符は私には奇妙に思えます

SqlCommand cmd = new SqlCommand("SELECT UserID, Email, PasswordQuestion," +
    " Comment, IsApproved, IsLockedOut, CreationDate, LastLoginDate," +
    " LastActivityDate, LastPasswordChangedDate, LastLockedOutDate" +
    " FROM Users WHERE Email = @email AND ApplicationName = @applicationname", conn);
于 2012-05-31T02:19:11.020 に答える
0

リーダーの代わりにDataadaptorを使用してみましたか?とにかくリーダーを適切に閉じていないため、Webサイトでメモリの問題が発生する可能性があります。正直なところ、非常に特殊な場合を除いて、ほとんどの場合、読者に問題があります。

于 2012-05-31T02:18:48.090 に答える