Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Aktuelle Identity
Kuehner
myCSharp.de - Member



Dabei seit:
Beiträge: 492

Themenstarter:

Aktuelle Identity

beantworten | zitieren | melden

Hallo,

Ich habe einen Data Adapter mit folgendem SQL Statement geschrieben:

INSERT INTO Configurations
                      (AlarmOn, Activated, UserName, datetime, TypeId)
VALUES (@AlarmOn, @Activated, @UserName, { fn NOW() }, @TypeId);
SELECT IDENT_CURRENT('Configurations');

Der C# Code dazu:

DeviceConfigurationTableAdapter configTa = new DeviceConfigurationTableAdapter();
int configId = Convert.ToInt32(configTa.Insert(alarmOn, activated, UserName, typeId));

Der Data Adapter sollte eigentlich die aktuelle ConfigurationId der Tabelle zurück geben. Leider bekomme ich immer den Wert 1 zurück.

Was mache ich falsch??

Danke für jeden Tip!
private Nachricht | Beiträge des Benutzers
Fabian
myCSharp.de - Member

Avatar #avatar-1590.jpg


Dabei seit:
Beiträge: 1994
Herkunft: Dortmund

beantworten | zitieren | melden

Hallo Kuehner,

soweit ich weiß, gibt die Insert-Methode nicht die IDENTITY zurück, sondern lediglich die beeinflussten Zeilen. Deswegen bekommst Du auch immer 1 zurück, da das Insert-Statement eine Zeile erstellt hat.

Die aktuelle IDENTITY musst Du glaube ich manuell holen.


Gruß,
Fabian
"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de
private Nachricht | Beiträge des Benutzers
Kuehner
myCSharp.de - Member



Dabei seit:
Beiträge: 492

Themenstarter:

beantworten | zitieren | melden

Danke! Habs dann jetzt halt mit einer Stored Procedure gemacht:

CREATE PROCEDURE dbo.InsertConfiguration 
	(
	@AlarmOn bit = 1,
	@Activated bit = 0,
	@UserName varchar(MAX),
	@TypeId int,
	@ControllerId int = 0,
	@NewId int OUTPUT
	)
AS
	INSERT INTO Configurations (AlarmOn, Activated, UserName, datetime, TypeId, ControllerId)
			VALUES (@AlarmOn, @Activated, @UserName, { fn NOW() }, @TypeId, @ControllerId);
	set @NewId = SCOPE_IDENTITY();
	RETURN


string connectionString = ConfigurationManager.ConnectionStrings["matcdbConnection"].ConnectionString;
SqlConnection sqlConnection = new SqlConnection(connectionString);
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.CommandText = "InsertConfiguration";
sqlCommand.Parameters.Add(new SqlParameter("@AlarmOn", alarmOn));
sqlCommand.Parameters.Add(new SqlParameter("@Activated", activated));
sqlCommand.Parameters.Add(new SqlParameter("@UserName", userName));
sqlCommand.Parameters.Add(new SqlParameter("@TypeId", typeId));
sqlCommand.Parameters.Add(new SqlParameter("@ControllerId", controllerId));
sqlCommand.Parameters.Add(new SqlParameter("@NewId", SqlDbType.Int, 4, ParameterDirection.Output, false, 0, 50, "NewId", DataRowVersion.Default, null));
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
int configId = (int)sqlCommand.Parameters["@NewId"].Value;
sqlConnection.Close();
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10074

beantworten | zitieren | melden

Das wäre auch einfacher gewesen, wenn Du gleich selber ExecuteScalar für deine
erste abfrage benutzt hättest.
private Nachricht | Beiträge des Benutzers