[英]Membership stored procedure aspnet_Membership_CreateUser not working
我一直在嘗試構建存儲過程以使用 Register.aspx。 我沒有使用向導部分。 因此編寫我自己的代碼。 我不明白錯誤在哪里。 如果我使用exec stored procedure
並發送相同的值,它將在 Management Studio 中執行。 但在代碼中它失敗了。
下面是執行存儲過程的代碼:
using (SqlConnection myConnection = new SqlConnection (ConfigurationManager.ConnectionStrings["connection"].ToString()))
{
using (SqlCommand insertNewUsers = new SqlCommand("aspnet_Membership_CreateUser", myConnection))
{
insertNewUsers.CommandType = CommandType.StoredProcedure;
insertNewUsers.Parameters.Add("@ApplicationName", SqlDbType.NVarChar, 256).Value = AppName;
insertNewUsers.Parameters.Add("@UserName", SqlDbType.NVarChar, 256).Value = UserName.Text;
insertNewUsers.Parameters.Add("@Password ", SqlDbType.NVarChar, 128).Value = goHashPassword;
insertNewUsers.Parameters.Add("@PasswordSalt", SqlDbType.NVarChar, 128).Value = newSalt;
insertNewUsers.Parameters.Add("@Email", SqlDbType.NVarChar, 256).Value = Email.Text;
// insertNewUsers.Parameters.Add(("@LoweredEmail"), SqlDbType.NVarChar, 256).Value = (Email.Text).ToLower();
insertNewUsers.Parameters.Add("@PasswordQuestion", SqlDbType.NVarChar, 256).Value = DBNull.Value ;
insertNewUsers.Parameters.Add("@PasswordAnswer", SqlDbType.NVarChar, 128).Value = DBNull.Value;
insertNewUsers.Parameters.Add("@IsApproved", SqlDbType.Bit).Value = 1;
// insertNewUsers.Parameters.Add("@IsLockedOut", SqlDbType.NVarChar, 1).Value = 0;
insertNewUsers.Parameters.Add("@CurrentTimeUtc", SqlDbType.DateTime).Value = DateTime.UtcNow.Date;
insertNewUsers.Parameters.Add("@CreateDate", SqlDbType.DateTime).Value = DateTime.Today.ToLocalTime();
insertNewUsers.Parameters.Add("@UniqueEmail", SqlDbType.Int).Value = 0;
insertNewUsers.Parameters.Add("@PasswordFormat", SqlDbType.Int).Value = 0;
pID = insertNewUsers.Parameters.Add("@return_value", SqlDbType.Int);
pID.Direction = ParameterDirection.ReturnValue;
try
{
if (insertNewUsers.Connection.State == ConnectionState.Closed)
{
insertNewUsers.Connection.Open();
}
insertNewUsers.ExecuteNonQuery(); // HERE IS WHERE IT FAILS
rowCount = (Int32)insertNewUsers.Parameters["@return_value"].Value;
} // END TRY
catch (Exception ex)
{
ErrorMessage.Text = ex.StackTrace.ToString();
}
finally
{
myConnection.Dispose();
}
}
}
現在,如果我使用以下參數在存儲過程中運行構建,它將運行並添加用戶並創建成員資格
DECLARE @return_value int,
@UserId uniqueidentifier
EXEC @return_value = [dbo].[aspnet_Membership_CreateUser]
@ApplicationName = N'/',
@UserName = N'Tester',
@Password = N'cUW3NXKEEjiNkxOjhLXwhHFQApQ=',
@PasswordSalt = N'GYkMYFzkDn0vm4Li',
@Email = N'Tester@gmail.com',
@PasswordQuestion = NULL,
@PasswordAnswer = NULL,
@IsApproved = 1,
@CurrentTimeUtc = N'20131027',
@CreateDate = N'20131027' ,
@UniqueEmail = 0,
@PasswordFormat = 0,
@UserId = @UserId OUTPUT
SELECT @UserId as N'@UserId'
SELECT 'Return Value' = @return_value
GO
我已經用表檢查了數據類型並且很好。 我不確定日期時間戳。 在手動執行時,我只需要像我指定的那樣給出 'yyyymmdd',但在 C# 中我指定為在代碼中看到的。 希望能在這方面找到一些幫助
~從技術上講,您在 DotNet 代碼中缺少一個參數。 (輸出UserIdParam見下)
~實際上,您應該使用 MembershipProvider API。 您正在通過您的實施重新發明輪子。
insertNewUsers.CommandType = CommandType.StoredProcedure;
insertNewUsers.Parameters.Add("@ApplicationName", SqlDbType.NVarChar, 256).Value = AppName;
insertNewUsers.Parameters.Add("@UserName", SqlDbType.NVarChar, 256).Value = UserName;
insertNewUsers.Parameters.Add("@Password ", SqlDbType.NVarChar, 128).Value = pwd;
insertNewUsers.Parameters.Add("@PasswordSalt", SqlDbType.NVarChar, 128).Value = string.Empty;
insertNewUsers.Parameters.Add("@Email", SqlDbType.NVarChar, 256).Value = Email;
// insertNewUsers.Parameters.Add(("@LoweredEmail"), SqlDbType.NVarChar, 256).Value = (Email.Text).ToLower();
insertNewUsers.Parameters.Add("@PasswordQuestion", SqlDbType.NVarChar, 256).Value = DBNull.Value;
insertNewUsers.Parameters.Add("@PasswordAnswer", SqlDbType.NVarChar, 128).Value = DBNull.Value;
insertNewUsers.Parameters.Add("@IsApproved", SqlDbType.Bit).Value = 1;
// insertNewUsers.Parameters.Add("@IsLockedOut", SqlDbType.NVarChar, 1).Value = 0;
insertNewUsers.Parameters.Add("@CurrentTimeUtc", SqlDbType.DateTime).Value = DateTime.UtcNow.Date;
insertNewUsers.Parameters.Add("@CreateDate", SqlDbType.DateTime).Value = DateTime.Today.ToLocalTime();
insertNewUsers.Parameters.Add("@UniqueEmail", SqlDbType.Int).Value = 0;
insertNewUsers.Parameters.Add("@PasswordFormat", SqlDbType.Int).Value = 0;
// Create parameter with Direction as Output (and correct name and type)
SqlParameter outputUserIdParam = new SqlParameter("@UserId", SqlDbType.UniqueIdentifier)
{
Direction = ParameterDirection.Output
};
insertNewUsers.Parameters.Add(outputUserIdParam);
pID = insertNewUsers.Parameters.Add("@return_value", SqlDbType.Int);
pID.Direction = ParameterDirection.ReturnValue;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.