System.Data.dll中发生SqlException但未在用户代码中处理

时间:2017-10-11 20:18:13

标签: c# tsql sqlcommand

我正在尝试使用Razor从ASP.Net中的AJAX运行此方法。我没有任何明显的错误,但每次我尝试运行它都会发送给我。我有一个像这样的方法运行完美。但我想我错过了一些东西。

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); 
}

1 个答案:

答案 0 :(得分:4)

当您要执行存储过程时使用CommandType.StoredProcedure,当您的命令是纯文本sql命令时,您不应设置此属性,因为默认值适用于命令文本

顺便说一下,虽然它不是一个致命的错误,但最好在一次性对象周围使用using语句,比如SqlCommand和SqlDataReader

using (SqlConnection con = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand(sql, con))
{
    // cmd.CommandType = CommandType.StoredProcedure;
    ... 
    using(SqlDataReader rdr = cmd.ExecuteReader())
    {
        ....
    }

}