Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Berjaya Mendapatkan Parameter Output daripada Prosedur Tersimpan Pelayan SQL dalam C#?

Bagaimanakah Saya Boleh Berjaya Mendapatkan Parameter Output daripada Prosedur Tersimpan Pelayan SQL dalam C#?

DDD
Lepaskan: 2025-01-10 09:09:40
asal
288 orang telah melayarinya

How Can I Successfully Retrieve Output Parameters from a SQL Server Stored Procedure in C#?

Menggunakan parameter output prosedur tersimpan dalam C#

Soalan

Mengembalikan parameter output daripada prosedur disimpan SQL Server ke dalam pembolehubah C# boleh mencabar. Walaupun mengikut pelbagai cadangan, banyak pembangun masih melaporkan nilai nol atau isu lain.

Prosedur Tersimpan

Pertimbangkan prosedur tersimpan berikut usp_InsertContract, yang direka untuk memasukkan nombor kontrak ke dalam pangkalan data dan mengembalikan kunci utama sebagai parameter output:

<code class="language-sql">CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
        VALUES (@ContractNumber);
    Select @NewId = Id From [dbo].[Contracts] where ContractNumber = @ContractNumber;
END</code>
Salin selepas log masuk

Buka pangkalan data

Buka sambungan pangkalan data menggunakan kod berikut:

<code class="language-csharp">pvConnectionString = "Server = Desktop-PC\SQLEXPRESS; Database = PVDatabase; User ID = sa;
    PASSWORD = *******; Trusted_Connection = True;";

try
{
    pvConnection = new SqlConnection(pvConnectionString);
    pvConnection.Open();
}
catch (Exception e)
{
    databaseError = true;
}</code>
Salin selepas log masuk

Laksanakan arahan

Laksanakan prosedur tersimpan menggunakan kod berikut:

<code class="language-csharp">pvCommand = new SqlCommand("usp_InsertContract", pvConnection);

pvCommand.Transaction = pvTransaction;
pvCommand.CommandType = CommandType.StoredProcedure;

pvCommand.Parameters.Clear();
pvCommand.Parameters.Add(new SqlParameter("@ContractNumber", contractNumber));

SqlParameter pvNewId = new SqlParameter();
pvNewId.ParameterName = "@NewId";
pvNewId.DbType = DbType.Int32;
pvNewId.Direction = ParameterDirection.Output;
pvCommand.Parameters.Add(pvNewId);

try
{
    sqlRows = pvCommand.ExecuteNonQuery();

    if (sqlRows > 0)
        Debug.Print("New Id Inserted =  ", 
            pvCommand.Parameters["@NewId"].Value.ToString()); 
}
catch (Exception e)
{
    Debug.Print("Insert Exception Type: {0}", e.GetType());
    Debug.Print("  Message: {0}", e.Message);
}</code>
Salin selepas log masuk

Penyelesaian

Gunakan SCOPE_IDENTITY() untuk mendapatkan kunci utama dan buat beberapa pengubahsuaian pada prosedur tersimpan untuk menyelesaikan masalah nilai nol:

<code class="language-sql">CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
    VALUES (@ContractNumber);
    SELECT @NewId = SCOPE_IDENTITY();
END</code>
Salin selepas log masuk

Untuk menggunakan prosedur tersimpan yang diubah suai ini dalam C#, laksanakan kod berikut:

<code class="language-csharp">using(SqlConnection conn = new SqlConnection(pvConnectionString))
using(SqlCommand cmd = new SqlCommand("dbo.usp_InsertContract", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@ContractNumber", SqlDbType.VarChar, 7).Value = contractNumber;
    cmd.Parameters.Add("@NewId", SqlDbType.Int).Direction = ParameterDirection.Output;
    conn.Open();
    cmd.ExecuteNonQuery();
    int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);
    conn.Close();
}</code>
Salin selepas log masuk

Kod ini berjaya mendapatkan dan mencetak kunci utama yang dikembalikan daripada prosedur yang disimpan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Berjaya Mendapatkan Parameter Output daripada Prosedur Tersimpan Pelayan SQL dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan