Hallo,
ich habe ein Problem mit der neuen Version von npgsql
mein DB Server wurde wie folgt eingerichtet:
lc_messages = 'German_Germany'
lc_monetary = 'German_Germany'
lc_numeric = 'German_Germany'
lc_time = 'German_Germany'
Als Test eine einfache Tabelle
CREATE TABLE test
(
id serial NOT NULL,
summe double precision,
CONSTRAINT pk_id PRIMARY KEY (id)
)
WITH (OIDS=FALSE);
ALTER TABLE test OWNER TO postgres;
Folgender Code funtkioniert klaglos mit Version 2.01 von npgsql:
Imports Npgsql
Public Class Form1
Sub doTest()
Dim pgC As New NpgsqlConnection
Dim pgBC As New NpgsqlConnectionStringBuilder
With pgBC
.Host = "localhost"
.Database = "data"
.UserName = "admin"
.Password = ""
.Port = 5432
End With
pgC.ConnectionString = pgBC.ConnectionString
pgC.Open()
Dim cmd As New NpgsqlCommand
cmd.Connection = pgC
cmd.CommandType = CommandType.Text
cmd.CommandText = "UPDATE test SET summe=0 WHERE id=1"
cmd.ExecuteNonQuery()
Dim mySQL As String = "SELECT id,summe FROM test WHERE id=1"
Dim da As New NpgsqlDataAdapter(mySQL, pgC)
Dim myCmdBld As New NpgsqlCommandBuilder(da)
da.UpdateCommand = myCmdBld.GetUpdateCommand
da.InsertCommand = myCmdBld.GetInsertCommand
da.DeleteCommand = myCmdBld.GetDeleteCommand
Dim dt As New DataTable
da.Fill(dt)
Dim dr As DataRow = dt.Rows(0)
With dr
.Item("summe") = "1,45678"
End With
da.Update(dt)
dt.AcceptChanges()
da.Dispose()
dt.Dispose()
pgC.Close()
pgC.Dispose()
End Sub
Private Sub SimpleButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton1.Click
doTest()
End Sub
End Class
Bei der Version 2.03 bekomme ich beim da.update(dt) eine Exception:
("Falscher Eingabesyntax für Typ double precision: »1,45678«")
Der generierte SQL in 2.03 ist:
"UPDATE "datenneux"."public"."test" SET "summe" = ((E'1,45678')::float8) WHERE (("id" = ((1)::int4)) AND ((((0)::int4) = 1 AND "summe" IS NULL) OR ("summe" = ((E'0')::float8))))"
In 2.01 ist es:
UPDATE "datenneux"."public"."test" SET "summe" = '1.45678'::float8 WHERE (("id" = 1::int4) AND ((0::int4 = 1 AND "summe" IS NULL) OR ("summe" = '0'::float8)))
Jetzt meine Frage verhält sich 2.03 falsch oder war es in 2.01 falsch??
Michael