sql >> Databáze >  >> RDS >> Sqlserver

Načítání výstupních proměnných SQL Server v c#

Za prvé – pokud se jedná o parametr OUTPUT, nemůžete použít .AddWithValue v C# - musíte použít:

SqlParameter outParam = cmd.Parameters.Add("@guidid", SqlDbType.Uniqueidentifier);
outParam.Direction = ParameterDirection.Output;

a také v kódu T-SQL musíte přiřadit novou hodnotu výstupnímu parametru!

ALTER PROCEDURE [dbo].[pr_Tbl_Test_Insert]
  @guidid uniqueidentifier output,
  @sname nvarchar(50)
AS

DECLARE @NewID UNIQUEIDENTIFIER
SET @NewID = newid();

-- INSERT a new row in the table.
INSERT [dbo].[Tbl_Test]([id], [name]) VALUES(@NewID, @sname);

SET @guidid = @NewID

Aktualizace: pokud to spustíte ve svém SQL Server Mgmt Studio - zobrazuje to něco?

DECLARE @insertedID UNIQUEIDENTIFIER

EXEC dbo.pr_Tbl_Test_Insert @guidid = @insertedID OUTPUT,
                            @sname = N'TestUser' -- nvarchar(50)

SELECT @insertedID

a ve vašem C# - musíte přečíst hodnotu výstupního parametru po volání ExecuteNonQuery !

SqlParameter outparam = cmd.Parameters.Add("@guidid",SqlDbType.UniqueIdentifier);
outparam.Direction = ParameterDirection.Output;

cmd.Parameters.AddWithValue("@sname", "mehdi");

cmd.ExecuteNonQuery();

Guid newlyInsertedID = new Guid(cmd.Parameters["@guidid"].Value);
MessageBox.Show(newlyInsertedID.ToString());


  1. Jak vyčistit (zabránit vkládání SQL) dynamickému SQL v SQL Server?

  2. 3 způsoby, jak vypsat všechny uložené procedury v databázi SQL Server

  3. max_allowed_packet, nemám MySQL

  4. Zbytečné dotazy v Hibernate - MySql