MS-SQL Typ Money in C#

Mir scheint, dass die Sql-Klassen im .NET das Datenbankfeld „Money“ von einem MS-SQL Server 2000 nicht korrekt ermitteln können.
Bei einem UPDATE-Statement auf eine Tabelle bekam ich diese Fehlermeldung:

Die implizite Konvertierung von Datentyp nvarchar in Datentyp money in der dbo.TBARTIKEL-Tabelle, ART_WERT-Spalte ist nicht zulässig. Verwenden Sie die CONVERT-Funktion, um diese Abfrage auszuführen.

Mit folgendem Code:

using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(Properties.Settings.Default.SqlConnectionString_SL))
{
	string tmpQuery = "UPDATE tbartikel SET art_wert = @art_wert WHERE art_id = @art_id";

	using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(tmpQuery, connection))
	{
		cmd.Parameters.AddWithValue("art_wert", DBNull.Value);
		cmd.Parameters.AddWithValue("art_id", 1);

		cmd.Connection.Open();
		cmd.ExecuteNonQuery();
		cmd.Connection.Close();
	}
}

Da scheinbar die .NET Klassen des SqlClients diesen Datentyp nicht korrekt ermitteln konnten, muss man ein wenig nachhelfen und den Typen der SqlDbType Eigenschaft setzen.

using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(Properties.Settings.Default.SqlConnectionString_SL))
{
	string tmpQuery = "UPDATE tbartikel SET art_wert = @art_wert WHERE art_id = @art_id";

	using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(tmpQuery, connection))
	{
		cmd.Parameters.AddWithValue("art_id", 1);

		var tmpSqlParaArtWert = new System.Data.SqlClient.SqlParameter("art_wert", System.Data.SqlDbType.Money);
		tmpSqlParaArtWert.Value = DBNull.Value;

		cmd.Parameters.Add(tmpSqlParaArtWert);

		cmd.Connection.Open();
		cmd.ExecuteNonQuery();
		cmd.Connection.Close();
	}
}

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.