Avatar billede alejandro Nybegynder
30. januar 2013 - 01:01 Der er 11 kommentarer

Check if Row exists SqlSource1.Update row else SqlSource1.Insert() how???

Hej, Jeg har søgt lidt rundt på nettet for at få svar på mit spørgsmål. Også herinde, men har ikke fundet et fyldesgørende svar.

Jeg har et projekt i C#.Net hvor jeg ønsker at at update og inserte data i en MSSQL database(Jeg bruger MS Visual Web Developer 2008 express edition)
problemet ligger i at jeg ønsker at checke for data i den pågældende tabel, således at jeg kan vælge om den skal updates hvis den eksister eller insertes hvis den ikke eksisterer.

Er det noget med at jeg lave et Select kald og på en eller anden måde tjekker om der kommer "Null" værdier retur eller hvad er Jeres foreslag. Håber formulering af problemstillingen var fyldesgørende. På forhånd tak!
Avatar billede Syska Mester
30. januar 2013 - 08:30 #1
Du har som jeg ser det to muligheder.

Som du selv er inde på. Kan du tjekke om række allerede findes.

Hvis du er på SQL 2008 kan du bruge MERGE. Du kan se et eksemple her fra stackoverflow som vist er samme problem du har.
http://stackoverflow.com/questions/639854/check-if-a-row-exists-otherwise-insert

eller er der den andne vej som du er inde på.
Avatar billede alejandro Nybegynder
30. januar 2013 - 18:57 #2
Hej, Du mener med dit indlæg at det skal foretages ved en store procedure?
Hvis ja hvordan skal denne så se ud?
Avatar billede Syska Mester
30. januar 2013 - 23:46 #3
Nej, pure sql i en SqlCommand.

Sådan bruger jeg det i hvert fald. Men husk at passe på SQL Injections.
Avatar billede alejandro Nybegynder
30. januar 2013 - 23:53 #4
LTER PROCEDURE dbo.StoredProcedure2
   
(
@lagerID int,
@productID int,
@Amount int
)
AS
IF EXISTS (SELECT* FROM lager_liner WHERE lagerId = @lagerID AND productId = @productID)
BEGIN  UPDATE lager_liner
    SET currentOnStock = currentOnStock + @Amount
    WHERE(lagerId = @lagerID) AND (productId = @productID)
END
ELSE  INSERT INTO lager_liner(lagerId, productId, currentOnStock)
                VALUES (@lagerID,@productID,@Amount)
Avatar billede alejandro Nybegynder
30. januar 2013 - 23:55 #5
Ovenstående store procedure jeg har lavet virker perfekt til mit formål. Den tjekker om varenog lageret eksistere og hvis den gør det, så updater det amount, eller så inserter den.
Avatar billede Syska Mester
31. januar 2013 - 00:03 #6
Mange veje fører til Rom :-)

Men der er som sådan ingen grund til at bruge en SP til det. Dette burde også nemt kunne lade sig gøre med en SqlCommand og så bare din query.
Avatar billede alejandro Nybegynder
31. januar 2013 - 00:09 #7
Har du et forslag i SQLCommand til ovenstående, så vil jeg meget gerne se det og evt. teste det af?
Avatar billede Syska Mester
31. januar 2013 - 00:20 #8
var connection = new SqlConnection(CON);
            connection.Open();

            var command = new SqlCommand(@"IF EXISTS (SELECT * FROM Servers WHERE SID = @SID)
BEGIN  UPDATE Servers SET Errors = Errors
    WHERE (SID = @SID)
END
ELSE  INSERT INTO SERVERS(SID)
                VALUES (@SID)", connection);

            command.Parameters.Add("@SID", SqlDbType.SmallInt).Value = 1;

            var executeNonQuery = command.ExecuteNonQuery();
            Console.WriteLine(executeNonQuery);

Sådan kan det gøres ... jeg har dog ændret sig i SQL querien, så den passede til en table og data jeg lige havde.
Avatar billede alejandro Nybegynder
30. maj 2013 - 00:50 #9
Jeg havde helt glemt dig, sorry, hermed dine point.
Avatar billede alejandro Nybegynder
30. maj 2013 - 00:51 #10
Skriv lige et svar så du kan få dine point
Avatar billede Syska Mester
30. maj 2013 - 12:53 #11
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester