如何处理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. ?

查看:194
本文介绍了如何处理System.Data.dll中发生类型'System.Data.SqlClient.SqlException'的异常,但未在用户代码中处理附加信息:字符串或二进制数据将被截断。 ?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆