有这样一段代码
public SqlDataReader getAllByDataReader()
{
String strSQL="Exec usp_tblAddress_sel";
SqlCommand cmd=new SqlCommand(strSQL,conn);
cmd.CommandType=CommandType.Text;
try
{
if(conn.State==ConnectionState.Closed)
{
conn.Open();
}
return cmd.ExecuteReader();
}
catch(Exception ex)
{
sqlError=ex.Message.ToString();
//throw ex;
}
}
问题主要集中在catch语句中,只要我把throw ex;这个语句注销掉,系统提示我“并非所有的代码都有返回值”,但是要使不注销这一句,可以正常运行,怎么回事呢
感谢
public SqlDataReader getAllByDataReader()
{
String strSQL="Exec usp_tblAddress_sel";
SqlCommand cmd=new SqlCommand(strSQL,conn);
cmd.CommandType=CommandType.Text;
try
{
if(conn.State==ConnectionState.Closed)
{
conn.Open();
}
return cmd.ExecuteReader();
}
catch(Exception ex)
{
sqlError=ex.Message.ToString();
//throw ex;
}
}
问题主要集中在catch语句中,只要我把throw ex;这个语句注销掉,系统提示我“并非所有的代码都有返回值”,但是要使不注销这一句,可以正常运行,怎么回事呢
感谢
解决方案 »
- 【求救】 mshtml.HTMLDocument和WebBrowser.Document查找网页中的元素,csExWB,cEXWB,
- 后台鼠标点击求助。
- vs2005装TFS怎么没有版本比较功能?
- 急救!!!!!!!!!!!110~~~~~~~~~
- 优化代码的方法【收集】
- 愚翁老大请进,有个问题一直困扰我
- 为什么找不到原代码语句??
- dataGridView1_CurrentCellChanged能否有办法知道是鼠标点击,是回车或是键盘方向键移动造成当前单元格改变?
- 学习c#的十大理由(歪理)
- 请教现在有哪些支持dotnet的设计工具?哪些比较好?
- 救命啊!!!!(急!)
- 请教:请问这个SQL SERVER 语句该怎么写?
{
String strSQL="Exec usp_tblAddress_sel";
SqlCommand cmd=new SqlCommand(strSQL,conn);
cmd.CommandType=CommandType.Text;
try
{
if(conn.State==ConnectionState.Closed)
{
conn.Open();
}
}
catch(Exception ex)
{
sqlError=ex.Message.ToString();
//throw ex;
}
return cmd.ExecuteReader();
}把return cmd.ExecuteReader();把到TRY外面就可以啦!
SqlDataReader dr;
try
{
dr = cmd.ExecuteReader();
}
...
return dr;
{
String strSQL="Exec usp_tblAddress_sel";
SqlCommand cmd=new SqlCommand(strSQL,conn);
cmd.CommandType=CommandType.Text;
try
{
if(conn.State==ConnectionState.Closed)
{
conn.Open();
}
return cmd.ExecuteReader();
}
catch(Exception ex)
{
sqlError=ex.Message.ToString();
return null;
}
}
---------------------------------------
throw ex抛出异常, 已经是从这个函数中返回了, 所以就不需要return了.
你上面的函数返回一个SqlDataReader是吧,
如果try{}里面的语句正常运行,那返回一个SqlDataReader是没错的,
可是如果try{}语句出错,假设是conn.Open(); 这句出错啊,那会怎样呢,
它会马上跳到 catch{}语句块,于是跳过了你的return语句,
而你的catch{}语句块里没有return语句,自然就出错了,
如果catch{}语句块里加上throw语句,你要明白throw语句是一种强制性的
语句,它会中止程序运行,不管你在什么地方,一碰到throw语句,
马上中止,它会向上寻找catch语句,这是编译器赋给throw的特殊功能,
也就是说它的优先级最高,