C# Odbc Exception

Hallo hab folgende paar Zeilen geschrieben um zu Testzwecken ein paar Zufallswerte in eine PostgreSQL-DB zu schreiben. Die Spalte lat habe dabei zunaechst selber angelegt was auch wunderbar klappt. Nur das hinzufuegen der Zufallszahlen bereitet Probleme. Naja hier erst mal mein Code:

static void Main(string[] args)
        {
            String connString = "DSN=PostgreSQL30W;Server=192.168.5.86;Database=rosoapcw;Uid=xxx;Pwd=xxx;";


            String queryStringLat = "ALTER TABLE feature ADD COLUMN lat float(8);";
            String queryStringInsertLat = "INSERT INTO feature (lat) values (9+RANDOM());";

            OdbcCommand command = new OdbcCommand(queryStringLat);
            using (OdbcConnection connection = new OdbcConnection(connString))
            {
                command.Connection = connection;
                connection.Open();
                command.ExecuteNonQuery();
                command.CommandText = queryStringInsertLat;
                command.ExecuteNonQuery();
            }
        }

Und hier dann mal die Komplette Exception…sie wird in der letzten Zeile geschmissen:

System.Data.Odbc.OdbcException was unhandled
Message=“ERROR [23502] ERROR: null value in column “id” violates not-null constraint;\nError while executing the query”
Source=“PSQLODBC35W.DLL”
ErrorCode=-2146232009
StackTrace:
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()
at DatabaseAccess.Program.Main(String[] args) in C:\src\Visual Studio 2005\Projects\DatabaseAccess\DatabaseAccess\Program.cs:line 33
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()



Kann mir wirklich nicht erklaeren was der Grund fuer die Exception ist…vll hat von euch ja wer eine Idee.

Danke schon mal im Voraus fuer die Hilfe!!!
mattulla

Hallo,

das Problem scheint zu sein, dass deine Tabelle ein ID-Feld hat, das nicht NULL sein darf und du kein autoincrement dafür angelegt hast. Siehe 2. und 3. Zeile des Dumps

Message="ERROR [23502] ERROR: null value in column \"id\" violates not-null constraint;\nError while executing the query"

Gruss
Rolf

hmm ja ok, danke erstmal…schliessen sich fuer mich direkt 3 Fragen an:

  1. Wie kann ich nachtraeglich ein Auto_Increment hinzufuegen?

  2. Was mache ich wenn ich keinn Auto_Incrment nutzen moechte aber die ID-Felder trotzdem nich NULL sein duerfen?

  3. Was hat das ganze damit zu tun, dass ich eine andere Spalte mit Werten fuellen will? Schliesslich sind alle Spalten soweit in Ordnung. In der Spalte ID fehlt nirgends ein Wert.


    Danke
    mattulla

hi,

  1. auto_increment gibt es nicht bei postgresql. das ist mysql :wink: was sowas macht ist eine sog. sequenz (genausow ie z.b. in oracle). näheres dazu findest du in der doku wo das auch sehr gut erklärt ist…

  2. das feld auf “NOT NULL” setzen und einen default wert setzen und natürlich dein programm sauber programmieren…

cu tb

Verwende den datentyp serial, der macht die erforderliche sequenz automatisch und verhält sich dann wie autoinc.