Ilość wyświetleń: 1050 « powrót

Procedura T-SLQa zwracająca wartość znakową [SQL]

Procedura SQL, która tworzy identyfikator jako string i pozwala na jego odczyt poprzez ADO.NET z poziomu aplikacji C# NET.

/*
  tworzenie tabeli
*/
DROP TABLE numer
GO
CREATE TABLE numer (
  [id]	  int IDENTITY (1, 1) NOT NULL PRIMARY KEY,
  [symbol]	 char(2) DEFAULT '',
  [nr]	 int DEFAULT 0,
  [status]	 int DEFAULT 0
)
GO

/*
  wlasciwa procedura tworzaca identyfikator
*/
DROP PROCEDURE numer_nowy_numer
GO
CREATE PROCEDURE numer_nowy_numer
  @pelny_nr varchar(20) OUTPUT, -- ta zmianna odpowiedzialna jest za zwrot wartosci
  @typ int,
  @rok int
AS
BEGIN
  DECLARE @numer int
  DECLARE @typ_numer varchar(2)

  /* kod typu analizy */
  SET @typ_numer = ''

  IF (@typ = 1)
    SET @typ_numer = 'SD'
  IF (@typ = 2)
    SET @typ_numer = 'KZ'
  IF (@typ = 3)
    SET @typ_numer = 'D'

  /* pobranie biezacego numeru */
  SELECT @numer = nr FROM numer WHERE symbol = @typ_numer

  /* aktualizacja numeru */
  UPDATE numer SET nr = nr + 1 WHERE symbol = @typ_numer

  IF (@numer IS NULL)
    SET @numer = 0

  /* utworzeniu stringa numeru */
  SET @pelny_nr = CAST(@numer AS varchar(10)) + '/' + @typ_numer + '/' + CAST(@rok AS char(4))

  RETURN (@numer)
END

i kod C# do odczytu wartości

// wyznaczenie nowego numeru analizy
//----------------------------------------------------------
public string UtworzNumer(int typ, int rok)
{
  string result = "";

  SqlCommand cmd  = new SqlCommand("numer_nowy_numer", (SqlConnection) database.GetConnection());
  cmd.CommandType = CommandType.StoredProcedure;

  SqlParameter returnVal = new SqlParameter("@return", SqlDbType.NVarChar);
  returnVal.Direction = ParameterDirection.ReturnValue;

  // definicja parametru, ktory ma byc zwracany
  SqlParameter numberVal = new SqlParameter("@pelny_nr", SqlDbType.NVarChar);
  numberVal.Direction = ParameterDirection.Output;
  numberVal.Size = 20;

  try
  {
     // parametry
    cmd.Parameters.Add( new SqlParameter("@typ", typ));
    cmd.Parameters.Add( new SqlParameter("@rok", rok));
    // dodanie parametru output
    cmd.Parameters.Add(numberVal);
    cmd.ExecuteNonQuery();

    // odczyt wyniku stworzonego przez procedure
    result = System.Convert.ToString(numberVal.Value);
  }
  catch (Exception e)
  {
    errorStore(e);
    result = "";
  }

  return (result);
}

» Dodaj komentarz


Komentarze: