Om man i en SP gör en insert och sedan skickar tillbaka ett SCOPE_IDENTITY hur tar man imot det i C# metoden Det borde väl bli jobbigare att arbeta med? Eftersom att du måste blanda in en reader sak alltså Nope, du kör en ExecuteNonQuery istället och behöver inte bekymra dig för att ta hand om ett returvärde. Om SPn tar emot in-värden så ska du ändå använda parametrar, bara att lägga till en till som är OUTPUT och sedan använda den efter att frågan körts. Tjena provat med parametrar men inte fått det attt funka riktigt, jag har provat typ så här: Här är ett exempel som jag kör. Hmmm funderar på vad som funkar bäst. Jag skulle ha två sp. Okey ska prova återkommer om det stöter på fler problem. Tack för hjälpen Patrik Gjorde så här om det kan vara till hjälp för någon. Kanske inte det bästa sättet men det funkar Det ser väl bra ut. Och om du ska använda id:t i koden efter det så hämtar du det med CMDSokLag.Parameters["@LagId"].Valuehur tar man imot ett SCOPE_IDENTITY??
Sv: hur tar man imot ett SCOPE_IDENTITY??
Sv: hur tar man imot ett SCOPE_IDENTITY??
Sv: hur tar man imot ett SCOPE_IDENTITY??
CMDSokKlubb.Parameters.Add(new SqlParameter("KlubbId",SqlDbType.Int)ParameterDirection.Output));
JAg sätter ) på fel ställen har ni någon annan lösning
MVH Stefan Ljungstedt Sv: hur tar man imot ett SCOPE_IDENTITY??
OBS, jag använder MS DAAB för databasfrågorna.
<code>
Dim parameters As SqlParameter() = { _
New SqlParameter("@EmailAddress", SqlDbType.NVarChar, 255), _
New SqlParameter("@Password", SqlDbType.Binary, 20), _
New SqlParameter("@FirstName", SqlDbType.NVarChar, 30), _
New SqlParameter("@LastName", SqlDbType.NVarChar, 50), _
New SqlParameter("@UserID", SqlDbType.Int, 4)}
parameters(0).Value = emailAddress
parameters(1).Value = password
parameters(2).Value = firstName
parameters(3).Value = lastName
parameters(4).Direction = ParameterDirection.Output
SqlHelper.ExecuteNonQuery( _
myConnString, _
CommandType.StoredProcedure, _
"Accounts_CreateUser", _
parameters _
)
Return CInt(parameters(4).Value)
</code>
Kom ihåg att du måste lägga in parametern i din Stored procedure också, i mitt fall
<code>
@UserID int OUTPUT
</code>Sv: hur tar man imot ett SCOPE_IDENTITY??
1. Köra din kod ovan och få en int som svar och sedan göra en insert till med svaret från SCOPE_IDENTITY i en ny.
2. Köra en metod som använder sig av parameters så att man kan fylla samma insert i samma metod dock att man använder sig av två sp
3. Använd sig av en sp som tar alla parametrar och gör två insert med SCOPE_IDENTITY från den första som parameter i den andraSv: hur tar man imot ett SCOPE_IDENTITY??
I den första gör jag en INSERT och sen exekverar jag den andra sp:n och skickar in SCOPE_IDENTITY. Då får du alltså skicka in alla värden till den första SPn.Sv: hur tar man imot ett SCOPE_IDENTITY??
MVH STefan Ljungstedt Sv: hur tar man imot ett SCOPE_IDENTITY??
public void spInsertLag(Lag lag,TeamManager TM)
{
SqlConnection cn = new SqlConnection();
SqlCommand CMDSokLag = new SqlCommand("spInsertTeam",cn);
cn.ConnectionString = Configuration.DefaultConnectionString;
CMDSokLag.CommandType = CommandType.StoredProcedure;
//Puts the parameters in the command
CMDSokLag.Parameters.Add("@LagNamn",SqlDbType.VarChar);
CMDSokLag.Parameters["@LagNamn"].Value = lag.TeamName;
CMDSokLag.Parameters.Add("@ForNamn",SqlDbType.VarChar);
CMDSokLag.Parameters["@ForNamn"].Value = TM.TeamManFName;
CMDSokLag.Parameters.Add("@EfterNamn",SqlDbType.VarChar);
CMDSokLag.Parameters["@EfterNamn"].Value = TM.TeamManEName ;
CMDSokLag.Parameters.Add("@Adress",SqlDbType.VarChar);
CMDSokLag.Parameters["@Adress"].Value = TM.TeamManLeveransadress ;
CMDSokLag.Parameters.Add("@Postnr",SqlDbType.VarChar);
CMDSokLag.Parameters["@Postnr"].Value = TM.TeamManPostnr ;
CMDSokLag.Parameters.Add("@PostOrt",SqlDbType.VarChar);
CMDSokLag.Parameters["@PostOrt"].Value = TM.TeamManOrt ;
CMDSokLag.Parameters.Add("@Telefon",SqlDbType.VarChar);
CMDSokLag.Parameters["@Telefon"].Value = TM.TeamManTelefon ;
CMDSokLag.Parameters.Add("@MobilTelefon",SqlDbType.VarChar);
CMDSokLag.Parameters["@MobilTelefon"].Value = TM.TeamManMobilTelefon ;
CMDSokLag.Parameters.Add("@Epost",SqlDbType.VarChar);
CMDSokLag.Parameters["@Epost"].Value = TM.TeamManEpost ;
CMDSokLag.Parameters.Add("@Datum",SqlDbType.VarChar);
CMDSokLag.Parameters["@Datum"].Value = TM.TeamManDatum ;
CMDSokLag.Parameters.Add(new SqlParameter("@LagId",SqlDbType.Int,0));
CMDSokLag.Parameters["@LagId"].Direction = ParameterDirection.Output;
cn.Open();
CMDSokLag.ExecuteNonQuery();
cn.Close();
SP
CREATE PROCEDURE spInsertTeam
@LagId int Output,
@LagNamn varchar(30),
@ForNamn varchar(30),
@EfterNamn varchar(30),
@Telefon varchar(20),
@MobilTelefon varchar(20),
@Epost varchar(50),
@Datum datetime,
@Adress varchar(30),
@Postnr varchar(10),
@PostOrt varchar(50)
AS
Insert into Team([LagNamn],[RegDatum])VALUES(@LagNamn,@Datum)
set @LagId = SCOPE_IDENTITY();
INSERT INTO Teammanager ([LagAnsFnamn],[LagAnsEnamn],[LagAnsTelefon],[LagAnsMobilTelefon],[LagAnsEpost],[RegDatum],[LagAnsAdress],[LagAnsPostnr],[LagAnsOrt],[LagId])
VALUES(@ForNamn,@EfterNamn,@Telefon,@MobilTelefon,@Epost,@Datum,@Adress,@Postnr,@PostOrt,@LagId)
GOSv: hur tar man imot ett SCOPE_IDENTITY??