---
title: "SP, @@Identity och C#"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/114064-sp-identity-och-c"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "aleborg"
published: "2004-10-21T10:15:16.000Z"
updated: "2004-10-21T15:31:38.000Z"
replies: 4
views: 396
page: 1
pages: 1
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/dotnet/114064-sp-identity-och-c"
---

# SP, @@Identity och C#

## #1 — aleborg, 2004-10-21T10:15Z

Jag har den här koden i  mitt datalager:

```
		protected int InsSqlQuery(string StoredProcName, IDataParameter[] Parameters)
		{			
			try
			{
				
				Connection.Open();
				SqlCommand Command = BuildCommand(StoredProcName,Parameters);
				Command.Parameters.Add(new SqlParameter("@@Identity", SqlDbType.Int, 4, ParameterDirection.Output, false, 0, 0, string.Empty, DataRowVersion.Default, null));
				Command.ExecuteNonQuery();
				return ((int)Command.Parameters["@@Identity"].Value);
			}
			finally
			{
				Connection.Close();
			}
		}
```

koden i BL ser ut så här:

```
		public int AddProfile(string name,int userid)
		{
			int rowsaffected = 0;
			try
			{
				SqlParameter[] parameters = 
					{
						new SqlParameter("@belongsto", SqlDbType.Int),
						new SqlParameter("@name", SqlDbType.NVarChar,30),
				};

				parameters[0].Value = userid;
				parameters[1].Value = name;

				InsSqlQuery("sp_AddProfile", parameters);
				return rowsaffected;
			}
			catch
			{
				return 0;
			}
		}
```

Men jag får tillbaka 0 hela tiden och inget sparas i databasen, SP:n som skickas in ser ut så här:

```
ALTER PROCEDURE webdns.sp_AddProfile
	@belongsto int,
	@name nvarchar(30)
AS
		INSERT INTO Profiles ([Name],BelongsTo) VALUES(@name,@belongsto)
```

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

## #2 — Mc Fetto, 2004-10-21T10:28Z

rowsaffected är alltid noll, men det säger ju inget om att det inte görs någon insert!

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

## #3 — aleborg, 2004-10-21T11:00Z

Såg det med nu :D
Ändrade i BL till:

```
		public int AddProfile(string name,int userid)
		{
			try
			{
				SqlParameter[] parameters = 
					{
						new SqlParameter("@belongsto", SqlDbType.Int),
						new SqlParameter("@name", SqlDbType.NVarChar,30),
				};

				parameters[0].Value = userid;
				parameters[1].Value = name;

				return InsSqlQuery("sp_AddProfile", parameters);
			}
			catch
			{
				return 0;
			}
		}
```

men det gjorde ingen skillnad

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

## #4 — aleborg, 2004-10-21T11:08Z

Ändrade:

```
ALTER PROCEDURE webdns.sp_AddProfile
	@belongsto int,
	@name nvarchar(30),
    @identity int output
AS
		INSERT INTO Profiles ([Name],BelongsTo) VALUES(@name,@belongsto)
		Set @identity = @@identity
```

Tack till Brimba

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

## #5 — Gladh, 2004-10-21T15:31Z

Det är bättre att använda dig av SCOPE_IDENTITY() istället för @@IDENTITY då det inte är säkert att @@IDENTITY ger dig tillbaka det identityt som du tror att du skall få.

För att veta mer så kan du läsa i BooksOnline som följer med SQL Server så får du reda på "problemet" med @@IDENTITY

\- Magnus

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/114064-sp-identity-och-c
