【发布时间】:2015-07-13 16:15:40
【问题描述】:
我正在运行一个 VS2013 项目,该项目需要我连接到 SQL Server 后端数据库并在其上运行存储过程。所以在我的 app_code 文件夹中,我创建了一个 SQLHelper 类:
public class SQLHelper
{
private const string myConnSetting = "zDevConnection";
public DataSet getSQLData(string mySQLStoredProcedure)
{
try
{
DataSet ds = new DataSet();
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[myConnSetting].ConnectionString;
SqlCommand cmd = new SqlCommand(mySQLStoredProcedure);
cmd.CommandType = CommandType.StoredProcedure;
SqlConnection cn = new SqlConnection(connectionString);
cmd.Connection = cn;
SqlDataAdapter ad = new SqlDataAdapter(cmd);
ad.Fill(ds);
return ds;
}
catch (Exception BadSQL)
{
throw BadSQL;
}
}
}
这样我就可以在我的控制器中调用和“填充”我可以用来做事的数据集。
所以。
protected DataSet insertBlogEntry()
{
SQLHelper mySQL = new SQLHelper();
return mySQL.getSQLData("mydatabase.MySTPName");
}
我这样称呼:
DataSet myEntry = insertBlogEntry(model.Email, model.Name, model.Company);
一切都很好,除了存储过程无法按预期工作之外,一切都“正常”,例如,如果我尝试插入重复记录,它会返回受控错误消息。
所以我要做的是在我的控制器中捕获并返回此错误。我发现我的 SQLHelper 类中有一个错误,但我不知道如何将此错误返回给我的控制器,该控制器需要一个数据集而不是字符串。
谁能帮我看看灯?
谢谢, 克雷格
【问题讨论】:
-
旁注:如果您不对其进行任何操作而是尝试立即重新抛出它,为什么您会捕获
Exception BadSQL?当您执行throw BadSQL;时,这实际上不是重新引发异常的正确方法,因为您将丢失堆栈跟踪。如果您需要重新抛出异常,只需执行throw;。但在这种情况下,你甚至不需要在那里有try-catch。 -
不确定我是否理解你,伙计
-
尝试改变 throw BadSQL;到 Exception.Message;
-
我认为我遇到的主要问题是我正在尝试填充数据集,而“badsql”或 exeption.message 是一个字符串
-
我知道这是几年后的事了,但 sstan 是这么说的:当你在此处捕获并重新抛出错误时,堆栈跟踪会说这个捕获块是异常的起源。您需要抛出实际异常的内容以便保留。
标签: c# sql-server asp.net-mvc visual-studio-2013 error-handling