Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sử dụng các tham số đầu ra thủ tục được lưu trữ trong C #

Tôi đã sửa đổi một chút quy trình đã lưu trữ của bạn (để sử dụng SCOPE_IDENTITY ) và nó trông như thế này:

CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
    VALUES (@ContractNumber)

    SELECT @NewId = SCOPE_IDENTITY()
END

Tôi đã thử điều này và nó hoạt động tốt (với quy trình được lưu trữ đã sửa đổi đó):

// define connection and command, in using blocks to ensure disposal
using(SqlConnection conn = new SqlConnection(pvConnectionString ))
using(SqlCommand cmd = new SqlCommand("dbo.usp_InsertContract", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
        
    // set up the parameters
    cmd.Parameters.Add("@ContractNumber", SqlDbType.VarChar, 7);
    cmd.Parameters.Add("@NewId", SqlDbType.Int).Direction = ParameterDirection.Output;

    // set parameter values
    cmd.Parameters["@ContractNumber"].Value = contractNumber;

    // open connection and execute stored procedure
    conn.Open();
    cmd.ExecuteNonQuery();

    // read output value from @NewId
    int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);
    conn.Close();
}

Điều này cũng hoạt động trong môi trường của bạn? Tôi không thể nói tại sao mã gốc của bạn không hoạt động - nhưng khi tôi làm điều này ở đây, VS2010 và SQL Server 2008 R2, nó hoạt động hoàn hảo ....

Nếu bạn không nhận lại được giá trị - thì tôi nghi ngờ bảng của bạn Contracts có thể không thực sự có một cột có IDENTITY tài sản trên đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng toán tử GIỮA trong SQL Server

  2. Nhập 'xml' vào Sql Server

  3. Chẩn đoán bế tắc trong SQL Server 2005

  4. Triển khai chức năng phân trang (bỏ qua / lấy) với truy vấn này

  5. Làm cách nào để tôi nhóm theo cột ngày giờ mà không mất thời gian cân nhắc