---
title: "skapa poster i mssqldatabas med c#"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/184407-skapa-poster-i-mssqldatabas-med-c"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Sanji"
published: "2010-08-19T11:53:36.000Z"
updated: "2010-08-24T08:17:45.000Z"
replies: 28
views: 1951
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/184407-skapa-poster-i-mssqldatabas-med-c"
---

# skapa poster i mssqldatabas med c#

_Sida 1 av 2._

## #1 — Sanji, 2010-08-19T11:53Z

Hej! Jag har en asp.net applikation som först ska lägga till en post i en tabell, och sedan omedelbart hämta denna information igen från databasen för att sedan lägga till ännu en post fast i en annan tabell. Den andra posten är beroende av information från den första för att resten av applikationen ska fungera som den ska. Hur kan jag göra detta? Jag måste hämta ID't från första posten för att lägga till den andra, och den andra skrivs sedan ut i en dynamisk tabell för att visas för användaren. Hur gör jag detta på enklaste sätt, så att användaren endast behöver en knapptryckning? ska jag spara artikelnummer från den första posten, och sedan när sidan laddats om använda detta nummer för att hämta den igen för att då också få ID't, och sedan spara den andra posten?

Då måste väl även artikelnumret vara unikt för att jag ska kunna hitta endast denna?

Ursäkta om det låter krångligt/dåligt beskrivet, jag vet bara inte riktigt hur jag skall gå till väga.

Permalänk: https://www.webforum.nu/p/184407

## #2 — Sanji, 2010-08-19T12:02Z

kan jag spara artikelnummret i en ViewState-variabel?

Permalänk: https://www.webforum.nu/p/2249031

## #3 — rhdf, 2010-08-19T15:05Z

Är det är på samma sida som data skall sparas och sedan visas?
I såfall borde du ju kunna lösa det med en metod som anropar en Stored Procedure som både sparar en post och returnerar data till tabellen

nåt i stil med
MyDynamicTable.datasource=MyLittleMethod(tjolahopp.text.... osv)

IeNumrable of\<poster\> MyLittleMethod(string title){

 // Spara post+hämta

}

Permalänk: https://www.webforum.nu/p/2249065

## #4 — dAEk, 2010-08-19T18:25Z

Om din databasmotor fattar triggers är det den bästa lösningen.

Syntaxen är typ:

```
create trigger AutoPopulateSecondaryTable 
	on PrimaryTable
	after insert
as
begin
	insert into SecondaryTable
	(
		refId, 
		foo, 
		bar, 
		baz
	)
	select 
		i.id, 
		i.fooValue, 
		i.barValue, 
		i.bazValue
	from 
		inserted i
	
end
```

Man får automatiskt en referens till den nya, precis skapade raden i tabellen genom inserted så den andra tabellen kommer automatiskt alltid att populeras när nya rader läggs in. Skitsmidigt och effektivt.

Triggers går att lägga in för updates också.   :)

Permalänk: https://www.webforum.nu/p/2249078

## #5 — Sanji, 2010-08-20T06:45Z

jag visste inte att det fanns triggers ^^ det verkar vara skitbra ju! jag ska testa lite så återkommer jag om jag behöver hjälp :)

Permalänk: https://www.webforum.nu/p/2249108

## #6 — Sanji, 2010-08-20T07:30Z

det finns ett litet problem, och det är att från en annan sida så ska man kunna lägga till poster i enbart den första tabellen. Om jag använder en trigger så kommer väl den andra tabellen också fyllas på oavsett varifrån jag lägger till? 

Dessutom när man lägger till i både den första och andra tabellen så finns det vissa värden som inte ska läggas till i den första tabellen, utan bara i den andra. Hur får jag dessa värden in i triggern?

Permalänk: https://www.webforum.nu/p/2249113

## #7 — Sanji, 2010-08-20T11:18Z

Okej, så om jag ska testa att göra en stored procedure, hur skickar jag värden till denna? Jag känner mig så dum som frågar alla dessa noobfrågor men jag har googlat runt ett tag och hittar inget som är särskilt lätt att förstå...

Permalänk: https://www.webforum.nu/p/2249131

## #8 — @nders, 2010-08-20T11:22Z

```
EXEC din_procedur värde1, värde2, värde3
```

Permalänk: https://www.webforum.nu/p/2249132

## #9 — dAEk, 2010-08-21T11:59Z

> **[Sanji skrev:](https://www.webforum.nu/p/1514180)**
>
> det finns ett litet problem, och det är att från en annan sida så ska man kunna lägga till poster i enbart den första tabellen. Om jag använder en trigger så kommer väl den andra tabellen också fyllas på oavsett varifrån jag lägger till?

I triggern skulle du kunna kolla om ett visst värde är satt eller inte och agera därefter. 

```
if (i.fooValue is null) -- fooValue skulle kunna vara en flagga som avgör om triggern ska köras eller ej.
begin
	insert into SecondaryTable
	(
		i.id, 
		'apa', -- istället för i.fooValue eftersom det inte har något värde.
		i.barVaue
		[...]

end
```

> **[Sanji skrev:](https://www.webforum.nu/p/1514180)**
>
> Dessutom när man lägger till i både den första och andra tabellen så finns det vissa värden som inte ska läggas till i den första tabellen, utan bara i den andra. Hur får jag dessa värden in i triggern?

Om du inte vill att värden ska läggas till i tabell #1, då ska dom väl inte vara med i insert-statementet? Vill man ha med data från andra tabeller går det att joina in dom som i en vanlig Sql-fråga. Triggers är inte så konstiga egentligen. Tänk att inserts funkar precis som vanligt på tabellen som datat läggs in i men med skillnaden att man kan göra andra saker i följd utan att det märks för den som körde själva inserten.

I en trigger kan man alltså använda den nya datan från inserted, hämta data från en annan tabell och skjuta in resultatet (av inserten och den andra tabellen) i en tredje tabell.

Hoppas att jag inte rörde ihop det mer nu.   :)

Permalänk: https://www.webforum.nu/p/2249278

## #10 — clarkbones, 2010-08-21T19:45Z

Triggers känns som helt fel väg, onödigt komplext. Använd en stored procedure.

Permalänk: https://www.webforum.nu/p/2249340

## #11 — dAEk, 2010-08-22T08:50Z

> **[clarkbones skrev:](https://www.webforum.nu/p/1514421)**
>
> Triggers känns som helt fel väg, onödigt komplext. Använd en stored procedure.

Komplext? Nej, det är det inte. Eller har du lust att förklara vad du menar med "onödigt komplext"? Är systemet beroende av att data alltid finns i tabell #2 också tycker jag inte att det är komplext alls - snarare tvärtom - men om det finns undantagsfall är det kanske inte optimalt, nej. Då måste man ju dokumentera undantagen och komma ihåg när/när inte ändringarna läggs in i tabell #2. I så fall kan jag nog hålla med.  :)

Permalänk: https://www.webforum.nu/p/2249370

## #12 — Sanji, 2010-08-23T06:21Z

Undantagsfall finns, som jag skrev i en tidigare post så ska man kunna köra en insert på endast FÖRSTA tabellen.

Den första tabellen är ett artikelregister som man kan fylla på från en sida, och den andra tabellen ska innehålla artiklar från artikelregistret MEN där har artiklarna också bland annat ett till ID som hör till en förfrågan, då man ska kunna lista artiklar som hör till denna förfrågan. Andra värden som antal finns också i denna tabell. 

Från förfrågan-skaparen ska man också kunna skapa en helt ny artikel som sparas in både i artikelregistret och i förfråganartikelregistret, för att användaren ska slippa gå fram och tillbaka ofta när denna arbetar,vilket sparar in en massa tid.

Vad jag förstår av er så verkar ni vara överens om att det är en stored procedure som gäller. Då ska jag försöka göra en sådan, jag har dock ingen erfarenhet av detta så det blir att läsa på lite... 

Tack för all hjälp hittills, återkommer!

Permalänk: https://www.webforum.nu/p/2249435

## #13 — Sanji, 2010-08-23T06:45Z

kan man få värdet för ID't i en stored procedure på samma sätt som i en trigger, genom att kolla **inserted**?

jag har skrivit ihop en stored procedure nu, men jag har gjort något fel... den klagar på "incorrect syntax near GO".

här är den:

```
ALTER PROCEDURE AddArticles_InqArticles
(

@companyID varchar(50),
@articlenr varchar(50),
@term varchar(50),
@description varchar(MAX),

@inquiryartID varchar(50),
@inquiryID varchar(50),
@notice int,
@revnr varchar(30),
@pieces varchar(13),
@suborder varchar(13),
@articletext varchar(MAX)
)
AS
insert into article(ID,companyID,articlenr,term,description)Values(NULL,@companyID,@articlenr,@term,@description)

declare @ID varchar(50)
set @ID='0';
set @ID=SCOPE_IDENTITY()

insert into inquiryarticles(inquiryartID,articleID,inquiryID,revnr,pieces,suborder,notice,articletext)VALUES(NULL,@ID,@inquiryID,@revnr,@pieces,@suborder,@notice,@articletext)
GO
```

jag läste lite snabbt om SCOPE_IDENTYTY(), men jag vet inte riktigt hur den fungerar... men jag ska tydligen kunna hitta ID't med den

Permalänk: https://www.webforum.nu/p/2249438

## #14 — Compusa, 2010-08-23T07:39Z

> **[Sanji skrev:](https://www.webforum.nu/p/1514524)**
>
> kan man få värdet för ID't i en stored procedure på samma sätt som i en trigger, genom att kolla **inserted**?

Nej, den går bara att använda i en trigger.

> **[Sanji skrev:](https://www.webforum.nu/p/1514524)**
>
> jag läste lite snabbt om SCOPE_IDENTYTY(), men jag vet inte riktigt hur den fungerar... men jag ska tydligen kunna hitta ID't med den

Japp! Mer om IDENTITY och SCOPE_IDENTITY [här](http://msdn.microsoft.com/en-us/library/ms187342.aspx). 

> **[Sanji skrev:](https://www.webforum.nu/p/1514524)**
>
> jag har skrivit ihop en stored procedure nu, men jag har gjort något fel... den klagar på "incorrect syntax near GO".

Du har missat en BEGIN och END. Har korrigerat din SP nedan:

```
ALTER PROCEDURE AddArticles_InqArticles
(
	@companyID varchar(50),
	@articlenr varchar(50),
	@term varchar(50),
	@description varchar(MAX),

	@inquiryartID varchar(50),
	@inquiryID varchar(50),
	@notice int,
	@revnr varchar(30),
	@pieces varchar(13),
	@suborder varchar(13),
	@articletext varchar(MAX)
)
AS
BEGIN
	insert into article(ID,companyID,articlenr,term,description)Values(NULL,@companyID,@articlenr,@term,@description)

	declare @ID varchar(50)
	set @ID='0';
	set @ID=SCOPE_IDENTITY()

	insert into inquiryarticles(inquiryartID,articleID,inquiryID,revnr,pieces,suborder,notice,articletext)VALUES(NULL,@ID,@inquiryID,@revnr,@pieces,@suborder,@notice,@articletext)
END
GO
```

Permalänk: https://www.webforum.nu/p/2249440

## #15 — Sanji, 2010-08-23T07:49Z

den säger fortfarande "incorrect syntax near 'go' "... jag kan inte se vad felet är :( men tack för att du sade till att jag hade glömt BEGIN/END!

Och tack för länken :)

Permalänk: https://www.webforum.nu/p/2249441

## #16 — Compusa, 2010-08-23T07:54Z

Märkligt. Scriptet fungerar för mig. Vad använder du för verktyg?

Du kan även ta bort semikolonet nedan:

```
set @ID='0'[B];[/B]
```

För du felet när du kör scriptet som redigerar din SP eller när du kör din SP?

Permalänk: https://www.webforum.nu/p/2249443

## #17 — @nders, 2010-08-23T08:00Z

Varför sätter du id som varchar? Om det är en räknare så borde det ju vara ett tal.

Och eftersom det här inte har något som helst med .NET att göra så flyttar jag tråden till lämpligare forum.

mvh

Permalänk: https://www.webforum.nu/p/2249444

## #18 — Compusa, 2010-08-23T08:10Z

Det funderade jag också på. Om du har id-kolumner som endast är numeriska med auto-inkrementering, så ska dina ID-kolumner var av en numerisk typ, exempelvis int.

```
ALTER PROCEDURE AddArticles_InqArticles
(
	@companyID varchar(50),
	@articlenr varchar(50),
	@term varchar(50),
	@description varchar(MAX),

	@inquiryartID varchar(50),
	@inquiryID varchar(50),
	@notice int,
	@revnr varchar(30),
	@pieces varchar(13),
	@suborder varchar(13),
	@articletext varchar(MAX)
)
AS
BEGIN
	insert into article(ID,companyID,articlenr,term,description)Values(NULL,@companyID,@articlenr,@term,@description)

	[B]declare @ID int
	set @ID = SCOPE_IDENTITY()[/B]

	insert into inquiryarticles(inquiryartID,articleID,inquiryID,revnr,pieces,suborder,notice,articletext)VALUES(NULL,@ID,@inquiryID,@revnr,@pieces,@suborder,@notice,@articletext)
END
GO
```

Hur är det med variablerna: @companyID, @articlenr, @inquiryartID, @inquiryID? Känns som att de också bara är tal.

Permalänk: https://www.webforum.nu/p/2249446

## #19 — Sanji, 2010-08-23T08:12Z

id't är inte ett tal eftersom id't är en **uniqueidentifier**. Ett exempel på ett ID är: "cf7243c8-3ef2-4d17-adf4-8769ed775973".  Ursäkta mig om jag skrivit i fel forum, men när jag har löst problemet med stored procedure så tänkte jag börja skriva om själva användandet av denna på sidan, vilket då blir .net... Men jag kanske ska göra in ny tråd i så fall?

Felet får jag när jag försöker spara den, tar jag bort "GO" så försvinner felet... SP'n har jag skrivit i vs2010

Permalänk: https://www.webforum.nu/p/2249447

## #20 — Compusa, 2010-08-23T08:22Z

> **[Sanji skrev:](https://www.webforum.nu/p/1514534)**
>
> id't är inte ett tal eftersom id't är en **uniqueidentifier**. Ursäkta mig om jag skrivit i fel forum, men när jag har löst problemet med stored procedure så tänkte jag börja skriva om själva användandet av denna på sidan, vilket då blir .net... Men jag kanske ska göra in ny tråd i så fall?

Ja, det låter vettigt. Nu gäller ju frågorna bara SQL-server och då passar tråden in bättre här.

> **[Sanji skrev:](https://www.webforum.nu/p/1514534)**
>
> Felet får jag när jag försöker spara den, tar jag bort "GO" så försvinner felet... SP'n har jag skrivit i vs2010

Ta bort GO då  :) Jag rekommenderar att du använder SQL Server Management Studio Express, när du skapa dina lagrade procedurer. Finns att hämta gratis!

Om ditt id är en uniqueidentifier, varför använder du då datatypen varchar och inte uniqueidentifier?

Permalänk: https://www.webforum.nu/p/2249448

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/184407-skapa-poster-i-mssqldatabas-med-c  
Nästa sida: https://www.webforum.nu/amne/databaser-sql/184407-skapa-poster-i-mssqldatabas-med-c/page2.md
