2016-10-14 297 views
1

我正在使用存储过程从SQL Server数据库检索员工详细信息。它在分段服务器上工作正常。执行存储过程时出现“找不到存储过程”错误消息

我刚更改了连接字符串。我已经指出它在我的本地SQL Server。连接字符串是正确的。我收到错误附近

cmd.executenonquery() 

这就是我要做的:

public EmployeeDetail GetClientData(int? clientId, string empId, string citizenId, string connectingString) 
{ 
    string constring = connectingString; 

    EmployeeDetail objclValues = new EmployeeDetail(); 

    using (SqlConnection con = new SqlConnection(constring)) 
    { 
     using (SqlCommand cmd = new SqlCommand("usp_Corporate_Employee_Get_Info_for_KYC", con)) 
     { 
      cmd.CommandType = CommandType.Text; 

      if (clientId == null) 
      { 
       cmd.Parameters.AddWithValue("@CorporateID", DBNull.Value); 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@CorporateID", clientId); 
      } 

      if (string.IsNullOrEmpty(empId)) 
      { 
       cmd.Parameters.AddWithValue("@EmpId", DBNull.Value); 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@EmpId", empId); 
      } 

      if (string.IsNullOrEmpty(citizenId)) 
      { 
       cmd.Parameters.AddWithValue("@CitizenId", DBNull.Value); 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@CitizenId", citizenId); 
      } 

      cmd.Parameters.Add("@CorporateName", SqlDbType.VarChar, 40); 
      cmd.Parameters.Add("@EmpFullName", SqlDbType.VarChar, 40); 
      cmd.Parameters.Add("@Nationality", SqlDbType.VarChar, 100); 
      cmd.Parameters.Add("@RetEmpId", SqlDbType.VarChar, 20); 
      cmd.Parameters.Add("@RetCitizenID", SqlDbType.VarChar, 15); 
      cmd.Parameters.Add("@ResponseCode", SqlDbType.VarChar, 2); 
      cmd.Parameters.Add("@ResponseMessage", SqlDbType.VarChar, 70); 

      cmd.Parameters["@CorporateName"].Direction = ParameterDirection.Output; 
      cmd.Parameters["@EmpFullName"].Direction = ParameterDirection.Output; 
      cmd.Parameters["@Nationality"].Direction = ParameterDirection.Output; 
      cmd.Parameters["@RetEmpId"].Direction = ParameterDirection.Output; 
      cmd.Parameters["@RetCitizenID"].Direction = ParameterDirection.Output; 
      cmd.Parameters["@ResponseCode"].Direction = ParameterDirection.Output; 
      cmd.Parameters["@ResponseMessage"].Direction = ParameterDirection.Output; 

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

      objclValues.ClientName = Convert.ToString(cmd.Parameters["@CorporateName"].Value.ToString()); 
      objclValues.EmpName = Convert.ToString(cmd.Parameters["@EmpFullName"].Value.ToString()); 
      objclValues.Nationality = Convert.ToString(cmd.Parameters["@Nationality"].Value.ToString()); 
      objclValues.RetEmpId = Convert.ToString(cmd.Parameters["@RetEmpId"].Value.ToString()); 
      objclValues.RetCitizenID = Convert.ToString(cmd.Parameters["@RetCitizenID"].Value.ToString()); 
      objclValues.ResponseCode = Convert.ToString(cmd.Parameters["@ResponseCode"].Value.ToString()); 
      objclValues.ResponseMessage = Convert.ToString(cmd.Parameters["@ResponseMessage"].Value.ToString()); 
      objclValues.clientId = clientId.GetValueOrDefault(0); 
      objclValues.EmpId = Convert.ToString(cmd.Parameters["@RetEmpId"].Value.ToString()); 
      objclValues.EmpCitizenId = Convert.ToString(cmd.Parameters["@RetCitizenID"].Value.ToString()); 
     } 
    } 
    return objclValues; 
} 

连接字符串如下。

<!--<add key="SPConnectionstring" value="Data Source=192.168.0.210;Initial Catalog=Test_C3CKYC;UID=sa;[email protected]" />--> 
<add key="SPConnectionstring" 
    value="Data Source=aufbkmjvl28\sqlexpress;Initial Catalog=C3KYC;persist security info=True;UID=sa;[email protected]" /> 

上面,注释掉部分将正常工作。

我可以知道为什么我得到这个错误吗?谢谢

+0

你有没有在一开始例如用模式尝试'dbo'?看起来你犯了别的错误,因为代码看起来是正确的。 – Fka

+0

我可以访问其他表格(除SP以外的其他表格) –

+0

嗯 - 考虑到你提到的唯一改变的就是连接字符串 - 你有数据库上的过程吗? –

回答

2

您需要更改

cmd.CommandType = CommandType.Text; 

这样:

cmd.CommandType = CommandType.StoredProcedure; 
如果你想运行一个存储过程

...

+0

我试过两个产量相同的结果 –

+0

@marc_s请你认为你可以看看这个问题:http://stackoverflow.com/questions/40197865/mssql-is-there-any-performance-penalty-for-包装-A-选择查询-IN-A-transa – eddy