Laden...

Aktuelle Identity

Erstellt von Kuehner vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.514 Views
K
Kuehner Themenstarter:in
489 Beiträge seit 2006
vor 17 Jahren
Aktuelle Identity

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!

1.985 Beiträge seit 2004
vor 17 Jahren

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

K
Kuehner Themenstarter:in
489 Beiträge seit 2006
vor 17 Jahren

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();

F
10.010 Beiträge seit 2004
vor 17 Jahren

Das wäre auch einfacher gewesen, wenn Du gleich selber ExecuteScalar für deine
erste abfrage benutzt hättest.