📄 sqlpersonalizationprovider.cs
字号:
return count;
}
private int ResetSharedState(string[] paths) {
int resultCount = 0;
if (paths == null) {
resultCount = ResetAllState(PersonalizationScope.Shared);
}
else {
SqlConnectionHolder connectionHolder = null;
SqlConnection connection = null;
try {
bool beginTranCalled = false;
try {
connectionHolder = GetConnectionHolder();
connection = connectionHolder.Connection;
CheckSchemaVersion( connection );
SqlCommand command = new SqlCommand("dbo.aspnet_PersonalizationAdministration_ResetSharedState", connection);
SetCommandTypeAndTimeout(command);
SqlParameterCollection parameters = command.Parameters;
SqlParameter parameter = parameters.Add(new SqlParameter("Count", SqlDbType.Int));
parameter.Direction = ParameterDirection.Output;
parameters.AddWithValue("ApplicationName", ApplicationName);
//
// Note: ADO.NET 2.0 introduced the TransactionScope class - in your own code you should use TransactionScope
// rather than explicitly managing transactions with the TSQL BEGIN/COMMIT/ROLLBACK statements.
//
parameter = parameters.Add("Path", SqlDbType.NVarChar);
foreach (string path in paths) {
if (!beginTranCalled && paths.Length > 1) {
(new SqlCommand("BEGIN TRANSACTION", connection)).ExecuteNonQuery();
beginTranCalled = true;
}
parameter.Value = path;
command.ExecuteNonQuery();
SqlParameter countParam = command.Parameters[0];
if (countParam != null && countParam.Value != null && countParam.Value is Int32) {
resultCount += (Int32) countParam.Value;
}
}
if (beginTranCalled) {
(new SqlCommand("COMMIT TRANSACTION", connection)).ExecuteNonQuery();
beginTranCalled = false;
}
}
catch {
if (beginTranCalled) {
(new SqlCommand("ROLLBACK TRANSACTION", connection)).ExecuteNonQuery();
beginTranCalled = false;
}
throw;
}
finally {
if (connectionHolder != null) {
connectionHolder.Close();
connectionHolder = null;
}
}
}
catch {
throw;
}
}
return resultCount;
}
public override int ResetUserState(string path, DateTime userInactiveSinceDate) {
path = CheckAndTrimString(path, "path", false, maxStringLength);
string [] paths = (path == null) ? null : new string [] {path};
return ResetUserState(ResetUserStateMode.PerInactiveDate,
userInactiveSinceDate, paths, null);
}
public override int ResetState(PersonalizationScope scope, string[] paths, string[] usernames) {
PersonalizationProviderHelper.CheckPersonalizationScope(scope);
paths = PersonalizationProviderHelper.CheckAndTrimNonEmptyStringEntries(paths, "paths", false, false, maxStringLength);
usernames = PersonalizationProviderHelper.CheckAndTrimNonEmptyStringEntries(usernames, "usernames", false, true, maxStringLength);
if (scope == PersonalizationScope.Shared) {
PersonalizationProviderHelper.CheckUsernamesInSharedScope(usernames);
return ResetSharedState(paths);
}
else {
PersonalizationProviderHelper.CheckOnlyOnePathWithUsers(paths, usernames);
return ResetUserState(paths, usernames);
}
}
private int ResetUserState(string[] paths, string[] usernames) {
int count = 0;
bool hasPaths = !(paths == null || paths.Length == 0);
bool hasUsernames = !(usernames == null || usernames.Length == 0);
if (!hasPaths && !hasUsernames) {
count = ResetAllState(PersonalizationScope.User);
}
else if (!hasUsernames) {
count = ResetUserState(ResetUserStateMode.PerPaths,
DefaultInactiveSinceDate,
paths, usernames);
}
else {
count = ResetUserState(ResetUserStateMode.PerUsers,
DefaultInactiveSinceDate,
paths, usernames);
}
return count;
}
private int ResetUserState(ResetUserStateMode mode,
DateTime userInactiveSinceDate,
string[] paths,
string[] usernames) {
SqlConnectionHolder connectionHolder = null;
SqlConnection connection = null;
int count = 0;
try {
bool beginTranCalled = false;
try {
connectionHolder = GetConnectionHolder();
connection = connectionHolder.Connection;
CheckSchemaVersion( connection );
SqlCommand command = new SqlCommand("dbo.aspnet_PersonalizationAdministration_ResetUserState", connection);
SetCommandTypeAndTimeout(command);
SqlParameterCollection parameters = command.Parameters;
SqlParameter parameter = parameters.Add(new SqlParameter("Count", SqlDbType.Int));
parameter.Direction = ParameterDirection.Output;
parameters.AddWithValue("ApplicationName", ApplicationName);
string firstPath = (paths != null && paths.Length > 0) ? paths[0] : null;
if (mode == ResetUserStateMode.PerInactiveDate) {
if (userInactiveSinceDate != DefaultInactiveSinceDate) {
// Special note: DateTime object cannot be added to collection
// via AddWithValue for some reason.
parameter = parameters.Add("InactiveSinceDate", SqlDbType.DateTime);
parameter.Value = userInactiveSinceDate.ToUniversalTime();
}
if (firstPath != null) {
parameters.AddWithValue("Path", firstPath);
}
command.ExecuteNonQuery();
SqlParameter countParam = command.Parameters[0];
if (countParam != null && countParam.Value != null && countParam.Value is Int32) {
count = (Int32) countParam.Value;
}
}
else if (mode == ResetUserStateMode.PerPaths) {
parameter = parameters.Add("Path", SqlDbType.NVarChar);
foreach (string path in paths) {
//
// Note: ADO.NET 2.0 introduced the TransactionScope class - in your own code you should use TransactionScope
// rather than explicitly managing transactions with the TSQL BEGIN/COMMIT/ROLLBACK statements.
//
if (!beginTranCalled && paths.Length > 1) {
(new SqlCommand("BEGIN TRANSACTION", connection)).ExecuteNonQuery();
beginTranCalled = true;
}
parameter.Value = path;
command.ExecuteNonQuery();
SqlParameter countParam = command.Parameters[0];
if (countParam != null && countParam.Value != null && countParam.Value is Int32) {
count += (Int32) countParam.Value;
}
}
}
else {
if (firstPath != null) {
parameters.AddWithValue("Path", firstPath);
}
parameter = parameters.Add("UserName", SqlDbType.NVarChar);
foreach (string user in usernames) {
//
// Note: ADO.NET 2.0 introduced the TransactionScope class - in your own code you should use TransactionScope
// rather than explicitly managing transactions with the TSQL BEGIN/COMMIT/ROLLBACK statements.
//
if (!beginTranCalled && usernames.Length > 1) {
(new SqlCommand("BEGIN TRANSACTION", connection)).ExecuteNonQuery();
beginTranCalled = true;
}
parameter.Value = user;
command.ExecuteNonQuery();
SqlParameter countParam = command.Parameters[0];
if (countParam != null && countParam.Value != null && countParam.Value is Int32) {
count += (Int32) countParam.Value;
}
}
}
if (beginTranCalled) {
(new SqlCommand("COMMIT TRANSACTION", connection)).ExecuteNonQuery();
beginTranCalled = false;
}
}
catch {
if (beginTranCalled) {
(new SqlCommand("ROLLBACK TRANSACTION", connection)).ExecuteNonQuery();
beginTranCalled = false;
}
throw;
}
finally {
if (connectionHolder != null) {
connectionHolder.Close();
connectionHolder = null;
}
}
}
catch {
throw;
}
return count;
}
/// <devdoc>
/// </devdoc>
private void SavePersonalizationState(SqlConnection connection, string path, string userName, byte[] state) {
SqlCommand command;
if (userName != null) {
command = new SqlCommand("dbo.aspnet_PersonalizationPerUser_SetPageSettings", connection);
}
else {
command = new SqlCommand("dbo.aspnet_PersonalizationAllUsers_SetPageSettings", connection);
}
SetCommandTypeAndTimeout(command);
command.Parameters.Add(CreateParameter("@ApplicationName", SqlDbType.NVarChar, ApplicationName));
command.Parameters.Add(CreateParameter("@Path", SqlDbType.NVarChar, path));
command.Parameters.Add(CreateParameter("@PageSettings", SqlDbType.Image, state));
command.Parameters.Add(CreateParameter("@CurrentTimeUtc", SqlDbType.DateTime, DateTime.UtcNow));
if (userName != null) {
command.Parameters.Add(CreateParameter("@UserName", SqlDbType.NVarChar, userName));
}
command.ExecuteNonQuery();
}
/// <internalonly />
protected override void SavePersonalizationBlob(WebPartManager webPartManager, string path, string userName, byte[] dataBlob) {
SqlConnectionHolder connectionHolder = null;
SqlConnection connection = null;
try {
try {
connectionHolder = GetConnectionHolder();
connection = connectionHolder.Connection;
CheckSchemaVersion( connection );
SavePersonalizationState(connection, path, userName, dataBlob);
}
finally {
if (connectionHolder != null) {
connectionHolder.Close();
connectionHolder = null;
}
}
}
catch {
throw;
}
}
private void SetCommandTypeAndTimeout(SqlCommand command) {
command.CommandType = CommandType.StoredProcedure;
if (_commandTimeout != -1) {
command.CommandTimeout = _commandTimeout;
}
}
internal static string CheckAndTrimString(string paramValue, string paramName) {
return CheckAndTrimString(paramValue, paramName, true);
}
internal static string CheckAndTrimString(string paramValue, string paramName, bool throwIfNull) {
return CheckAndTrimString(paramValue, paramName, throwIfNull, -1);
}
internal static string CheckAndTrimString(string paramValue, string paramName,
bool throwIfNull, int lengthToCheck) {
if (paramValue == null) {
if (throwIfNull) {
throw new ArgumentNullException(paramName);
}
return null;
}
string trimmedValue = paramValue.Trim();
if (trimmedValue.Length == 0) {
throw new ArgumentException(
SR.GetString(SR.PersonalizationProviderHelper_TrimmedEmptyString,
paramName));
}
if (lengthToCheck > -1 && trimmedValue.Length > lengthToCheck) {
throw new ArgumentException(
SR.GetString(SR.StringUtil_Trimmed_String_Exceed_Maximum_Length,
paramValue, paramName, lengthToCheck.ToString(CultureInfo.InvariantCulture)));
}
return trimmedValue;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -