using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
namespace NetProduct.DataAccess
{
public class Common
{
private static SqlConnection conn = new SqlConnection();
private static SqlCommand comm = new SqlCommand();
..................
//执行sql语句的静态方法
public static void ExecuteSql(string byvSql)
{
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = byvSql;
comm.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message); //这里抛出异常了,信息为:String or binary data would be truncated.The statement has been terminated.
}
finally
{
closeConnection();
}
}
//显示提示信息的静态方法
public static void showMsgBox(string strMessage, Page pagethis)
{
string strScript = "";
strScript += "<script language=\"javascript\">";
strScript += " alert(\"" + strMessage + "\");";
strScript += "</script>";
if (!pagethis.Page.ClientScript.IsStartupScriptRegistered("showMsgBox"))
pagethis.Page.ClientScript.RegisterStartupScript(pagethis.GetType(), "showMsgBox", strScript);
}
}
}
//添加按钮代码
protected void btnAdd_Click(object sender, EventArgs e)
{
.................
..........
string sql = "insert into person(person_no,person_name,Sex,Address)"+
"values(" + person_no + "," + person_name + "," + sex + "," + address + ")";
try
{
DataAccess.Common.ExecuteSql(sql); //在这里调用的静态方法ExecuteSql
bind();
}
catch (Exception e1)
{
DataAccess.Common.showMsgBox(e1.Message , this); //--->类Common抛出的异常,在这里什么处理?
}
}
我的目的是想通过语句DataAccess.Common.showMsgBox(e1.Message , this)来显示类Common抛出的异常信息
也就是显示出提示信息:
String or binary data would be truncated.The statement has been terminated.
但虽然有点长,但是很简单!
谢谢各位!
21 个解决方案
#1
把你DATAACCESS里的try catch 去掉 不就可以在页面里显示了吗?
#2
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = byvSql;
comm.ExecuteNonQuery();
closeConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = byvSql;
comm.ExecuteNonQuery();
closeConnection();
#3
大哥sql错了啊
string sql = "insert into person(person_no,person_name,Sex,Address)"+
"values('" + person_no + "','" + person_name + "','" + sex + "','" + address + "')";
string sql = "insert into person(person_no,person_name,Sex,Address)"+
"values('" + person_no + "','" + person_name + "','" + sex + "','" + address + "')";
#4
尽量别直接拼接字符串,还是使用带参数的存储过程吧
这样很容易注入的!!
这样很容易注入的!!
#5
if (!pagethis.Page.ClientScript.IsStartupScriptRegistered("showMsgBox"))
pagethis.Page.ClientScript.RegisterStartupScript(pagethis.GetType(), "showMsgBox", strScript ,true);
加个true试试
pagethis.Page.ClientScript.RegisterStartupScript(pagethis.GetType(), "showMsgBox", strScript ,true);
加个true试试
#6
还有就是为什么不把提示信息的方法写在页面层
而写在数据访问层那
而写在数据访问层那
#7
catch (Exception e1)
{
//DataAccess.Common.showMsgBox(e1.Message , this); //--->类Common抛出的异常,在这里什么处理?
//首先可以不处理,就是注释掉,
//或者将错误信息发送到页面
}
{
//DataAccess.Common.showMsgBox(e1.Message , this); //--->类Common抛出的异常,在这里什么处理?
//首先可以不处理,就是注释掉,
//或者将错误信息发送到页面
}
#8
在sql语句前面已经做处理了,如变量person_no的值前后都已经加单引号了;
现在不是sql语句的问题,而是什么处理被调用类抛出的异常信息
#9
报这种异常错误的原因一般是因为你向数据库里插数据时,字段类型设置的太小,比如数据库里是varchar(10),但你插了20个字符
#10
写到另一个类也可以,考虑到经验调用,要共享,暂时把它写到这个类里
#11
那看看这个呢
#12
把try...catch去掉,设置个断点,看看错在哪儿了吧
#13
string sql = "insert into person(person_no,person_name,Sex,Address)";
sql += "values('" + person_no + "','" + person_name + "','" + sex + "','" + address + "')";
sql += "values('" + person_no + "','" + person_name + "','" + sex + "','" + address + "')";
#14
我知道可以限制输入字符串的长度.....
现在是测试,我目的是什么处理异常?什么得到被调用类抛出的异常信息?
#15
e1.Message
就是错误信息啊.
直接弹出他就行了啊?
就是错误信息啊.
直接弹出他就行了啊?
#16
变量的值前后要有单引号,这一点已经有代码处理了,只是没有帖出来.....
既然被调用的类已经抛出了异常,那么调用者就要处理抛出的异常,没错吧?
#17
OK
#18
#19
变量的值前后要有单引号,这一点已经有代码处理了,只是没有帖出来.....
既然被调用的类已经抛出了异常,那么调用者就要处理抛出的异常,没错吧?
==
这取决与你的设计, 在正常情况下最好是调用者处理抛出的异常
既然被调用的类已经抛出了异常,那么调用者就要处理抛出的异常,没错吧?
==
这取决与你的设计, 在正常情况下最好是调用者处理抛出的异常
#20
按原代码,当运行到这句:DataAccess.Common.showMsgBox(e1.Message, this);
e1.Message返回的字符信息是:
"String or binary data would be truncated.\r\nThe statement has been terminated."
错误提示:
出现了运行时间错误
是否要进行调试?
行:315
错误:未结束的字符串常量
e1.Message返回的字符信息是:
"String or binary data would be truncated.\r\nThe statement has been terminated."
错误提示:
出现了运行时间错误
是否要进行调试?
行:315
错误:未结束的字符串常量
#21
现在原因找到了,上面返回的字符串中包含有"\r\n"
这个错误信息要在javascript中显示出来,因为包含转义符"\r\n"而错误,
也就是javascript不识别转义符;
把这个转义符替换掉就好了
...............
.....
string sql = "insert into person(person_no,person_name,Sex,Address)"+
"values(" + person_no + "," + person_name + "," + sex + "," + address + ")";
try
{
DataAccess.Common.ExecuteSql(sql);
bind();
}
catch (Exception e1)
{
string strErr = e1.Message.Replace("\r\n",""); -->要加一行代码,去掉转义符
DataAccess.Common.showMsgBox(strErr, this);
}
OK,结帖!
这个错误信息要在javascript中显示出来,因为包含转义符"\r\n"而错误,
也就是javascript不识别转义符;
把这个转义符替换掉就好了
...............
.....
string sql = "insert into person(person_no,person_name,Sex,Address)"+
"values(" + person_no + "," + person_name + "," + sex + "," + address + ")";
try
{
DataAccess.Common.ExecuteSql(sql);
bind();
}
catch (Exception e1)
{
string strErr = e1.Message.Replace("\r\n",""); -->要加一行代码,去掉转义符
DataAccess.Common.showMsgBox(strErr, this);
}
OK,结帖!
#1
把你DATAACCESS里的try catch 去掉 不就可以在页面里显示了吗?
#2
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = byvSql;
comm.ExecuteNonQuery();
closeConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = byvSql;
comm.ExecuteNonQuery();
closeConnection();
#3
大哥sql错了啊
string sql = "insert into person(person_no,person_name,Sex,Address)"+
"values('" + person_no + "','" + person_name + "','" + sex + "','" + address + "')";
string sql = "insert into person(person_no,person_name,Sex,Address)"+
"values('" + person_no + "','" + person_name + "','" + sex + "','" + address + "')";
#4
尽量别直接拼接字符串,还是使用带参数的存储过程吧
这样很容易注入的!!
这样很容易注入的!!
#5
if (!pagethis.Page.ClientScript.IsStartupScriptRegistered("showMsgBox"))
pagethis.Page.ClientScript.RegisterStartupScript(pagethis.GetType(), "showMsgBox", strScript ,true);
加个true试试
pagethis.Page.ClientScript.RegisterStartupScript(pagethis.GetType(), "showMsgBox", strScript ,true);
加个true试试
#6
还有就是为什么不把提示信息的方法写在页面层
而写在数据访问层那
而写在数据访问层那
#7
catch (Exception e1)
{
//DataAccess.Common.showMsgBox(e1.Message , this); //--->类Common抛出的异常,在这里什么处理?
//首先可以不处理,就是注释掉,
//或者将错误信息发送到页面
}
{
//DataAccess.Common.showMsgBox(e1.Message , this); //--->类Common抛出的异常,在这里什么处理?
//首先可以不处理,就是注释掉,
//或者将错误信息发送到页面
}
#8
在sql语句前面已经做处理了,如变量person_no的值前后都已经加单引号了;
现在不是sql语句的问题,而是什么处理被调用类抛出的异常信息
#9
报这种异常错误的原因一般是因为你向数据库里插数据时,字段类型设置的太小,比如数据库里是varchar(10),但你插了20个字符
#10
写到另一个类也可以,考虑到经验调用,要共享,暂时把它写到这个类里
#11
那看看这个呢
#12
把try...catch去掉,设置个断点,看看错在哪儿了吧
#13
string sql = "insert into person(person_no,person_name,Sex,Address)";
sql += "values('" + person_no + "','" + person_name + "','" + sex + "','" + address + "')";
sql += "values('" + person_no + "','" + person_name + "','" + sex + "','" + address + "')";
#14
我知道可以限制输入字符串的长度.....
现在是测试,我目的是什么处理异常?什么得到被调用类抛出的异常信息?
#15
e1.Message
就是错误信息啊.
直接弹出他就行了啊?
就是错误信息啊.
直接弹出他就行了啊?
#16
变量的值前后要有单引号,这一点已经有代码处理了,只是没有帖出来.....
既然被调用的类已经抛出了异常,那么调用者就要处理抛出的异常,没错吧?
#17
OK
#18
Exception objErr = Server.GetLastError().GetBaseException();
string err =objErr.Message;
另:应该采用全局异常处理的方法。出现异常应该跳转到异常处理页面。
讲解
DEMO
#19
变量的值前后要有单引号,这一点已经有代码处理了,只是没有帖出来.....
既然被调用的类已经抛出了异常,那么调用者就要处理抛出的异常,没错吧?
==
这取决与你的设计, 在正常情况下最好是调用者处理抛出的异常
既然被调用的类已经抛出了异常,那么调用者就要处理抛出的异常,没错吧?
==
这取决与你的设计, 在正常情况下最好是调用者处理抛出的异常
#20
按原代码,当运行到这句:DataAccess.Common.showMsgBox(e1.Message, this);
e1.Message返回的字符信息是:
"String or binary data would be truncated.\r\nThe statement has been terminated."
错误提示:
出现了运行时间错误
是否要进行调试?
行:315
错误:未结束的字符串常量
e1.Message返回的字符信息是:
"String or binary data would be truncated.\r\nThe statement has been terminated."
错误提示:
出现了运行时间错误
是否要进行调试?
行:315
错误:未结束的字符串常量
#21
现在原因找到了,上面返回的字符串中包含有"\r\n"
这个错误信息要在javascript中显示出来,因为包含转义符"\r\n"而错误,
也就是javascript不识别转义符;
把这个转义符替换掉就好了
...............
.....
string sql = "insert into person(person_no,person_name,Sex,Address)"+
"values(" + person_no + "," + person_name + "," + sex + "," + address + ")";
try
{
DataAccess.Common.ExecuteSql(sql);
bind();
}
catch (Exception e1)
{
string strErr = e1.Message.Replace("\r\n",""); -->要加一行代码,去掉转义符
DataAccess.Common.showMsgBox(strErr, this);
}
OK,结帖!
这个错误信息要在javascript中显示出来,因为包含转义符"\r\n"而错误,
也就是javascript不识别转义符;
把这个转义符替换掉就好了
...............
.....
string sql = "insert into person(person_no,person_name,Sex,Address)"+
"values(" + person_no + "," + person_name + "," + sex + "," + address + ")";
try
{
DataAccess.Common.ExecuteSql(sql);
bind();
}
catch (Exception e1)
{
string strErr = e1.Message.Replace("\r\n",""); -->要加一行代码,去掉转义符
DataAccess.Common.showMsgBox(strErr, this);
}
OK,结帖!