在System.Data.dll中发生SqlException,但没有在用户代码中处理
问题描述:
我试图从ASP.Net中的AJAX与Razor运行此方法。我没有任何可见的错误,但每次尝试运行时都会发送给我。我有这样的方法完美运行。但我想我错过了一些东西。在System.Data.dll中发生SqlException,但没有在用户代码中处理
这是我的C#方法
[WebMethod]
public JsonResult GetDeparments()
{
string cs = "Data Source=DMX87025;Initial Catalog=DB_PCC;Integrated Security=True";
string sql = "SELECT * FROM[DB_PCC].[dbo].[Departments]";
List<Departments> departaments = new List<Departments>();
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand(sql , con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader(); //unhandled expection here
while (rdr.Read())
{
Departments dep = new Departments();
dep.Id = Convert.ToInt32(rdr["Id"]);
dep.Code = rdr["Code"].ToString();
dep.Description = rdr["Description"].ToString();
departaments.Add(dep);
}
}
JavaScriptSerializer js = new JavaScriptSerializer();
return Json(new { success = true, message = (js.Serialize(departaments)) },
JsonRequestBehavior.AllowGet);
}
答
当你要执行一个存储过程,当你的命令,你不应该设定一个纯文本SQL命令可以使用CommandType.StoredProcedure此属性是因为缺省值适用于命令文本
顺便说一句,虽然它不是致命错误,但最好使用围绕像SqlCommand和SqlDataReade这样的可丢弃对象的using语句r
using (SqlConnection con = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand(sql, con))
{
// cmd.CommandType = CommandType.StoredProcedure;
...
using(SqlDataReader rdr = cmd.ExecuteReader())
{
....
}
}
您的选择命令不是StoredProcedure。删除设置CommandType的行 – Steve
最重要的是,将'use'应用于所有其他事物,而不仅仅是'SqlConnection',删除在asp.net mvc中不需要的[WebMethod],并将'departments'直接地,没有使用手动'JavaScriptSerializer'(你觉得你是序列化只是JSON响应的一部分吗?)。 – GSerg