Hej! Du ska titta på @@IDENTITY / SCOPE_IDENTITY. >Du ska titta på @@IDENTITY / SCOPE_IDENTITY. Japp det har jag och den heter ju ProductID och är en uniqueidentifier. Så om jag fattar dig rätt så skall jag lägga in NEWID(). in i min insert procedur. Nja, inte riktigt rätt. Så här bör din proc bli (om du fortfarande vill returnera 1 eller 0 som du gjorde från början): Tack! När du skapar parametrarna till ditt SqlCommand-objekt får du skapa den som output-parameter. Ok <code> Jo Christoffer en fråga bara! Ledsen, skrev ur huvudet så det blev fel där. Oskar gav dig svaret.Retunera Guid ID från databasen vid insert
Jag använder mig av Guid som ID post när jag skapar rader i en tabell.
För detta använder jag mig av en SP
<code>
-- ----------------------------------------------------------------------------------------
-- System:
-- spInsertProduct
--
-- Beskrivning
-- Skapar en ny Product
--
-- Parametrar
--
-- $History: $
-- ----------------------------------------------------------------------------------------
ALTER PROCEDURE spInsertProduct
-- Parametrar
@Product VARCHAR(50),
@ProductCatID uniqueidentifier,
@Price Money,
@Regtime datetime,
@RegPerson uniqueidentifier,
@ChangeTime datetime,
@ChangePerson uniqueidentifier
AS
SET NOCOUNT ON
INSERT INTO
tbl_Product
(
Product,
ProductCatID,
Price,
Regtime,
RegPerson,
ChangeTime,
ChangePerson
)
VALUES
(
@Product,
@ProductCatID,
@Price,
@Regtime,
@RegPerson,
@ChangeTime,
@ChangePerson
)
IF @@ROWCOUNT = 1
RETURN 0
ELSE
RETURN -1
-- EOF --
</code>
nu undrar jag hur jag kan returnera vilket Guid posten fick. Jag vill slipppa göra en ny fråga för att se vilket ID posten fick. Jag skall skapa en koppling till en annan tabel och spara ner det nya ID numret där.
Alltså.
1. Spara ner en post i tabellen
2. Få reda på vilket ID nummer denna fick utan att behöva skicka in en ny fråga för att plocka ut ID numret som jag sedan skall direkt in i en ny tabellSv: Retunera Guid ID från databasen vid insert
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sa-ses_6n8p.aspSv:Retunera Guid ID från databasen vid insert
De används bara för att få värdet i IDENTITY-kolumner, detta gällde en kolumn av datatypen uniqueidentifier. Tyronne, jag antar att du har en kolumn i tbl_Product som är skapad med DEFAULT NEWID(). Jag rekommenderar att du tar bort defaulten på den och istället skapar och insertar värdet till den i din procedur (fortfarande med NEWID()). På så vis kan du returnera det värde som användes i en out-parameter.Sv: Retunera Guid ID från databasen vid insert
Jag har läst artikel enl ovan, så om jag i slutet skriver
<code>
SELECT @@IDENTITY AS 'Identity'
</code>
Så kan jag fånga upp det tilldelade id numret
via
<code>
result = cmd.ExecuteNonQuery();
</code>
dvs att jag deklarerar result som en Guid.
är jag rätt på det eller behöver jag göra mer
/TyronneSv:Retunera Guid ID från databasen vid insert
ALTER PROCEDURE spInsertProduct
-- Parametrar
@Product VARCHAR(50),
@ProductCatID uniqueidentifier,
@Price Money,
@Regtime datetime,
@RegPerson uniqueidentifier,
@ChangeTime datetime,
@ChangePerson uniqueidentifier,
@NewId uniqueidentifier OUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @productId uniqueidentifier
SET @productId = NEWID()
INSERT INTO
tbl_Product
(
ProductId,
Product,
ProductCatID,
Price,
Regtime,
RegPerson,
ChangeTime,
ChangePerson
)
VALUES
(
@productId,
@Product,
@ProductCatID,
@Price,
@Regtime,
@RegPerson,
@ChangeTime,
@ChangePerson
)
IF @@ROWCOUNT = 1
BEGIN
SET @NewId = @productId
RETURN 0
END
ELSE
BEGIN
SET @NewId = NULL
RETURN -1
END
END
GO
-- För att testa
DECLARE @NewId uniqueidentifier
EXEC spInsertProduct 'En produkt...'
, 'C11BA534-A6C3-444C-9508-57160A2FE63C'
, 0
, '2005-01-28'
, 'C11BA534-A6C3-444C-9508-57160A2FE63C'
, '2005-01-28'
, 'C11BA534-A6C3-444C-9508-57160A2FE63C'
, @NewId OUT
PRINT @NewId
Sv: Retunera Guid ID från databasen vid insert
Bara en sista fråga då hur tar jag emot idnumret i metoden.
Just nu så har jag ju
result = cmd.ExecuteNonQuery(); och här fångar jag ju 1 eller nollan. Hur skriver jag då för att kunna lagra ProductID i en variabel.
/TyronneSv:Retunera Guid ID från databasen vid insert
@Product VARCHAR(50),
@ProductCatID uniqueidentifier OUTPUT,
@Price Money,
@Regtime datetime,
@RegPerson uniqueidentifier,
@ChangeTime datetime,
@ChangePerson uniqueidentifier
Edit: såg att Christoffer redan gjort detta i sitt svar.
//Håkan
Sv:Retunera Guid ID från databasen vid insert
Sv: Retunera Guid ID från databasen vid insert
jag har försökt det men jag hittar inget som fungerar. dvs jag har försökt testa mig fram för att få ut NewId värdet ur proceduren. Och jag hittar inget i MSDN som kan passa.
/TyronneSv:Retunera Guid ID från databasen vid insert
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "spInsertProduct";
// kod som lägger till övriga parametrar här
SqlParameter newId = new SqlParameter("@NewId", SqlDbType.UniqueIdentifier);
newId.Direction = ParameterDirection.Output;
cmd.Parameters.Add(newId);
result = cmd.ExecuteNonQuery();
Guid guid = cmd.Parameters("@NewId").Value;
</code>Sv:Retunera Guid ID från databasen vid insert
I ditt exempel så skrver du
<code>
Guid guid = cmd.Parameters("@NewId").Value;
</code>
problemet är ju bara att Parameters är en egenskap coh kräver ex add() mm. VS Klagar på att den hittade just en egenskap när den förväntade en metod. Vad har vi missat?
/TyronneSv: Retunera Guid ID från databasen vid insert