2017-10-11 44 views
1

我试图从ASP.Net中的AJAX与Razor运行此方法。我没有任何可见的错误,但每次尝试运行时都会发送给我。我有这样的方法完美运行。但我想我错过了一些东西。在System.Data.dll中发生SqlException,但没有在用户代码中处理

enter image description here

这是我的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); 
} 
+3

您的选择命令不是StoredProcedure。删除设置CommandType的行 – Steve

+0

最重要的是,将'use'应用于所有其他事物,而不仅仅是'SqlConnection',删除在asp.net mvc中不需要的[WebMethod],并将'departments'直接地,没有使用手动'JavaScriptSerializer'(你觉得你是序列化只是JSON响应的一部分吗?)。 – GSerg

回答

4

当你要执行一个存储过程,当你的命令,你不应该设定一个纯文本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()) 
    { 
     .... 
    } 

} 
相关问题