Maison > développement back-end > C++ > Comment puis-je récupérer avec succès les paramètres de sortie d'une procédure stockée SQL Server en C# ?

Comment puis-je récupérer avec succès les paramètres de sortie d'une procédure stockée SQL Server en C# ?

DDD
Libérer: 2025-01-10 09:09:40
original
346 Les gens l'ont consulté

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

Utilisation des paramètres de sortie de procédure stockée en C#

Question

Le retour des paramètres de sortie d'une procédure stockée SQL Server dans une variable C# peut être difficile. Malgré diverses recommandations, de nombreux développeurs signalent toujours des valeurs nulles ou d'autres problèmes.

Procédure stockée

Considérez la procédure stockée suivante usp_InsertContract, conçue pour insérer un numéro de contrat dans la base de données et renvoyer la clé primaire comme paramètre de sortie :

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
Copier après la connexion

Ouvrir la base de données

Ouvrez la connexion à la base de données en utilisant le code suivant :

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;
}
Copier après la connexion

Exécuter la commande

Exécutez la procédure stockée en utilisant le code suivant :

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);
}
Copier après la connexion

Solution

Utilisez SCOPE_IDENTITY() pour récupérer la clé primaire et apporter quelques modifications à la procédure stockée pour résoudre le problème de valeur nulle :

CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
    VALUES (@ContractNumber);
    SELECT @NewId = SCOPE_IDENTITY();
END
Copier après la connexion

Pour utiliser cette procédure stockée modifiée en C#, implémentez le code suivant :

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();
}
Copier après la connexion

Ce code récupère et imprime avec succès la clé primaire renvoyée par la procédure stockée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal