存储过程无法正常工作并停止

时间:2016-01-02 09:48:50

标签: c# sql asp.net

我在项目中为scheduler运行了一段代码。但它没有按预期工作。

private void Initiate_User(string strEmpCard)
   {
       //conn.Open();
       ObjPriCmd = new SqlCommand("exec [sp_c_Initiate_Clearance] " + strEmpCard.ToString() + "", conn);
       ObjPriCmd.ExecuteNonQuery();
   }

调试器在调试ExecuteNonQuery()行后停止并打开表单。我也无法追踪错误。这有什么不对吗?

更新

我的错误查询

insert into p_emp_clearance_hdr 
  (Emp_mkey,
  Emp_card_no, 
  RA_1,
  RA_2,
  Depatment, 
  Sub_Department, 
  Date_of_Joining, 
  Resignation_date, 
  Last_Working_Days, 
  UserId) 
select 
  em.mkey,
  em.emp_card_no,
  em.Reporting_To,
  em.Reporting_To2,
  em.Department_mkey,
  em.SubDept_mkey,
  convert(varchar(10), em.resig_date, 103) resig_date, 
  convert( varchar(10), em.Dt_Of_Join, 103) Dt_Of_Join, 
  convert(varchar(10), em.Dt_of_leave, 103) Dt_of_leave,
  um.mkey 
from emp_mst em join user_mst um 
on em.mkey = um.Employee_mkey
where em.mkey = @emp_mkey

2 个答案:

答案 0 :(得分:4)

正如您在评论中所解释的那样,您收到了错误:

  

ExecuteNonQuery:尚未初始化Connection属性。

这表示您尚未初始化连接。你刚宣布它:

SqlConnection conn;

你应该这样做:

conn = new SqlConnection(@"you connection string");
//then your code
ObjPriCmd = new SqlCommand("exec [sp_c_Initiate_Clearance] " + strEmpCard.ToString(), conn);
ObjPriCmd.ExecuteNonQuery();

最佳做法:

您应该使用SqlCommand媒体资源CommandType来定义从StoredProcedure致电时您正在呼叫C#。并使用SqlCommand .Parameters.Add定义参数,它自己处理SqlInjection问题。

conn = new SqlConnection(@"you connection string");
using (SqlCommand cmd = new SqlCommand("sp_c_Initiate_Clearance", conn)) 
{
    cmd.CommandType = CommandType.StoredProcedure;

    //                  parameter name  ,   parameter type              parameter value
    cmd.Parameters.Add("@parameter name", SqlDbType.VarChar).Value = strEmpCard.ToString();

    con.Open();
    cmd.ExecuteNonQuery();
}

答案 1 :(得分:0)

您可以使用声明来尝试: -

using (SqlCommand cmd = new SqlCommand("sp_c_Initiate_Clearance", conn)) {
  cmd.CommandType = CommandType.StoredProcedure;

  cmd.Parameters.Add("@Parameter Name", Type).Value = "Value of Parameter";
  conn.Open();
  cmd.ExecuteNonQuery();
}