Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pobieranie zmiennych wyjściowych programu SQL Server w c#

Po pierwsze - jeśli jest to parametr OUTPUT, nie możesz użyć .AddWithValue w C# - musisz użyć:

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

a także, w swoim kodzie T-SQL, musisz przypisać nową wartość do parametru wyjściowego!

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

Aktualizacja: jeśli uruchomisz to w swoim SQL Server Mgmt Studio - czy coś pokazuje?

DECLARE @insertedID UNIQUEIDENTIFIER

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

SELECT @insertedID

a w Twoim C# - musisz odczytać wartość parametru wyjściowego po wywołaniu 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Magazyn zapytań SQL Server

  2. Uzyskiwanie przesunięcia przesunięcia daty i czasu w SQL Server

  3. SQL Server:Tylko ostatni wpis w GROUP BY

  4. Zaktualizuj, jeśli nazwa istnieje, w przeciwnym razie wstaw - w SQL Server

  5. Zwracaj wiersze dokładnie w kolejności, w jakiej zostały wstawione