存储过程不工作,正在停止

本文关键字:工作 存储过程 | 更新日期: 2023-09-27 18:28:38

我正在项目中为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

存储过程不工作,正在停止

正如您在评论中所解释的,您将得到错误:

ExecuteNonQuery:连接属性尚未初始化。

这意味着您尚未初始化连接。您刚刚声明:

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来定义从C#调用时要调用StoredProcedure。并使用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();
}

您可以使用USing语句进行尝试:-

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