如何处理System.Data.dll中发生类型'System.Data.SqlClient.SqlException'的异常,但未在用户代码中处理附加信息:字符串或二进制数据将被截断。 ? [英] how to handle An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code Additional information: String or binary data would be truncated. ?
问题描述
使用System;
使用System.Collections.Generic;
使用System.Configuration;
使用System.Data;
使用System.Data.SqlClient;
使用System.Linq;
使用System.Web;
使用System.Web .Security;
使用System.Web.UI;
使用System.Web.UI.WebControls;
public partial class ChangePassword:System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
if(!IsPostBack)
{
if(!IsPasswordResetLinkValid())
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text =密码重置链接已过期或无效;
}
}
}
私人布尔IsPasswordResetLinkValid()
{
列表<&的SqlParameter GT; paramList = new List< sqlparameter>()
{
new SqlParameter()
{
ParameterName =@ GUID,
Value = Request.QueryString [uid]
}
}; < br $>
返回ExecuteSP(spIsPasswordResetLinkValid,paramList);
}
private bool ExecuteSP(string SPName,List< ; sqlparameter> SPParameters)
{
string CS = ConfigurationManager.ConnectionStrings [constr]。ConnectionString;
using(SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand(SPName,con);
cmd.CommandType = CommandType.StoredProcedure;
foreach(SPParameters中的SqlParameter参数)
{
cmd.Parameters.Add(parameter);
} b / b
con.Open();
返回Convert.ToBoolean(cmd.ExecuteScalar());
}
}
private bool ChangeUserPassword()
{
List< ;&的SqlParameter GT; paramList = new List< sqlparameter>()
{
new SqlParameter()
{
ParameterName = @GUID,
Value = Request.QueryString [uid]
},
新的SqlParameter()
{
ParameterName =@ Password,
Value = FormsAuthentication.HashPasswordForStoringInConfigFile(txtNewPassword.Text,SHA1)
} < br $>
};
返回ExecuteSP(spChangePassword,paramList);
}
protected void btnSave_Click(object sender,EventArgs e)
{
if(ChangeUserPassword())
{
lblMessage.Text =密码已成功更改!;
}
其他
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text =密码重置链接已过期或无效;
}
}
}
使用更改密码的存储过程
创建Proc spChangePassword
@GUID uniqueidentifier,
@Password nvarchar(100)
as
开始
声明@UserId int
从tblResetPasswordRequests中选择@UserId = UserId
其中Id = @GUID
if(@UserId为null)
开始
- 如果UserId不存在
选择0作为IsPasswordChanged
结束
否则
开始
- 如果UserId存在,请使用新密码更新
更新tblUsers set
[密码] = @Password
其中Id = @UserId
- 删除密码重置请求行
从tblResetPasswordRequests中删除
其中Id = @GUID
选择1作为IsPasswordChanged
结束
结束
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class ChangePassword : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (!IsPasswordResetLinkValid())
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text = "Password Reset link has expired or is invalid";
}
}
}
private bool IsPasswordResetLinkValid()
{
List<sqlparameter> paramList = new List<sqlparameter>()
{
new SqlParameter()
{
ParameterName = "@GUID",
Value = Request.QueryString["uid"]
}
};
return ExecuteSP("spIsPasswordResetLinkValid", paramList);
}
private bool ExecuteSP(string SPName, List<sqlparameter> SPParameters)
{
string CS = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand(SPName, con);
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter parameter in SPParameters)
{
cmd.Parameters.Add(parameter);
}
con.Open();
return Convert.ToBoolean(cmd.ExecuteScalar());
}
}
private bool ChangeUserPassword()
{
List<sqlparameter> paramList = new List<sqlparameter>()
{
new SqlParameter()
{
ParameterName = "@GUID",
Value = Request.QueryString["uid"]
},
new SqlParameter()
{
ParameterName = "@Password",
Value = FormsAuthentication.HashPasswordForStoringInConfigFile(txtNewPassword.Text, "SHA1")
}
};
return ExecuteSP("spChangePassword", paramList);
}
protected void btnSave_Click(object sender, EventArgs e)
{
if (ChangeUserPassword())
{
lblMessage.Text = "Password Changed Successfully!";
}
else
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text = "Password Reset link has expired or is invalid";
}
}
}
Stored Procedure to change password that wass i using
Create Proc spChangePassword
@GUID uniqueidentifier,
@Password nvarchar(100)
as
Begin
Declare @UserId int
Select @UserId = UserId
from tblResetPasswordRequests
where Id= @GUID
if(@UserId is null)
Begin
-- If UserId does not exist
Select 0 as IsPasswordChanged
End
Else
Begin
-- If UserId exists, Update with new password
Update tblUsers set
[Password] = @Password
where Id = @UserId
-- Delete the password reset request row
Delete from tblResetPasswordRequests
where Id = @GUID
Select 1 as IsPasswordChanged
End
End
推荐答案
处理错误将在代码中完成。
例如
Handling the error would be done in code.
For e.g.
private bool ChangeUserPassword()
{
try
{
List paramList = new List()
{
new SqlParameter()
{
ParameterName = "@GUID",
Value = Request.QueryString["uid"]
},
new SqlParameter()
{
ParameterName = "@Password",
Value = FormsAuthentication.HashPasswordForStoringInConfigFile(txtNewPassword.Text, "SHA1")
}
};
return ExecuteSP("spChangePassword", paramList);
}
catch (SqlException sqlEx)
{
//Handle the SQL exception
}
catch (Exception ex)
{
//Handle general exception
}
}
下一部分是修复此异常的方法。
看起来你试图插入一个字符串长于数据库中的字段长度。
这可能会抛出异常。
The next part would be how fix this exception.
Looks like you are trying to insert a string longer than the field length in the database.
This could be throwing the exception.
这篇关于如何处理System.Data.dll中发生类型'System.Data.SqlClient.SqlException'的异常,但未在用户代码中处理附加信息:字符串或二进制数据将被截断。 ?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!