Announcement

Collapse
No announcement yet.

Delphi + ADO.NET + InvalidCastException Horror

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi + ADO.NET + InvalidCastException Horror

    Hallo,

    ich habe ein Problem mit ADO.NET. Ich arbeite mit der Firebird Datenbank und dem FirebirdManagedProvider für ADO.NET.

    In der Datenbank habe ich eine Tabelle (BLOBTEST) angelegt.

    Diese Tabelle hat zwei Spalten : BESCHREIBUNG ist vom Typ Char(30),DATA ist vom Typ Blob.

    Mit folgendem Code versuche ich in die Datenbank zu schreiben:

    <PRE>
    uses firebirdsql.data.firebird;

    database : string;
    command : fbcommand;
    connection : fbconnection;
    buffer : array of byte;

    begin

    database := 'User=sysdba;' +
    'Password=masterkey;' +
    'Database=test;' +
    'DataSource=localhost;' +
    'Port=3050;';

    connection := fbconnection.Create(database);

    connection.Open;

    command := fbcommand.Create('INSERT INTO BLOBTEST (BESCHREIBUNG,XMLDATA) VALUES (@be,@xm)',connection);

    setlength(buffer,3);
    buffer[0] := 65;
    buffer[1] := 66; // irgendwelche Daten
    buffer[2] := 67; // für BLOB Column

    command.Parameters.Add('@xm',fbdbtype.Binary).Valu e := buffer;
    command.Parameters.add('@be',fbdbtype.Char).Value := 'Hallo Welt';

    command.ExecuteNonQuery;

    connection.Close;
    </PRE>
    Bei diesem Code wird immer eine InvalidCastException ausgelöst. Ich habe alles überprüft, kann aber keinen Fehler finden.

    Weiss vielleicht jemand, was da los sein könnte ?

  • #2
    Hallo,

    das folgende Beispiel fügt eine Abbildung als BLOb-Daten über <i>INSERT INTO Photos (Dateiname, Bildinhalt) VALUES (?, ?)</i>
    in eine ACCESS-Datenbank ein. Im Dialog für die <b>Parameters</b>-Kollektion wird dazu der OleDbType <b>LongVarBinary</b> für den 2. Parameter festgelegt:
    <pre>
    <b>procedure</b> TWinForm.ButtonInsert_Click(sender: System.<b>Object</b>; e: System.EventArgs);
    <b>var</b>
    aStream : Stream;
    aBLOb : TBytes;
    <b>begin</b>
    <b>if</b> OpenFileDialog1.ShowDialog = System.Windows.Forms.DialogResult.OK <b>then</b>
    <b>begin</b>
    aStream := OpenFileDialog1.OpenFile;
    SetLength(aBLOb, aStream.Length);
    aStream.<b>Read</b>(aBLOb, 0, aStream.Length);
    OleDbCommandINSERT.Parameters[0].Value := OpenFileDialog1.FileName;
    oleDbCommandINSERT.Parameters[1].Value := aBLOb;
    OleDbConnection1.Open;
    <b>try</b>
    OleDbCommandINSERT.ExecuteNonQuery;
    <b>finally</b>
    OleDbConnection1.Close;
    <b>end</b>;
    StatusBar1.Text := OpenFileDialog1.FileName + <font color="#9933CC">' hinzugefügt.'</font>;
    <b>end</b>;
    <b>end</b>;
    </pre>

    &gt; was da los sein könnte ?

    Auf den ersten Blick sieht das so aus, als ob beim manuellen Füllen der Parameters-Kollektion die Reihenfolge der Parameter vertauscht wurden. Nicht alle Provider vertragen derartige Eingriffe :-

    Comment

    Working...
    X