Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SqlDataAdapter.Fill() - Konvertierungsüberlauf

Obwohl das Dataset zum "Füllen" eines Datenadapters zulässig ist, habe ich es normalerweise mit einer DataTable gemacht, da ich beim Abfragen nur eine Ergebnismenge erwarte. Allerdings würde ich die Tabelle vorab abfragen, nur um ihre Struktur zu erhalten ... so etwas wie

select whatever from yourTable(s) where 1=2

Dadurch erhalten Sie die erwarteten Ergebnisspalten, wenn Sie ein

ausführen
DataTable myTable = new DataTable();
YourAdapter.Fill( myTable );

Jetzt, da Sie eine lokale Tabelle haben, deren Inhaltsgröße nicht fehlschlägt, weil keine Datensätze zurückgegeben wurden, können Sie jetzt explizit zu dieser einen Spalte gehen und ihre Datentyp-/Größeninformationen nach Bedarf festlegen ...

myTable.Columns["NameOfProblemColumn"].WhateverDataType/Precision = Whatever you need...

JETZT ist Ihr lokales Schema legitim und die Problemspalte wurde mit ihrer Genauigkeit identifiziert. Geben Sie jetzt Ihre richtige Abfrage mit der richtigen where-Klausel ein und nicht die 1 =2, um tatsächlich Daten zurückzugeben ... Da im ersten Durchgang keine tatsächlichen Zeilen vorhanden sind, müssen Sie nicht einmal myTable.Clear() um die Zeilen zu löschen ... Führen Sie einfach die Abfrage und dataAdapter.Fill() erneut aus .

Ich habe es nicht wirklich versucht, da ich Ihre Datenprobleme nicht habe, um dasselbe Problem zu simulieren, aber der theoretische Prozess sollte Sie durchbringen, ohne alle Spalten explizit durchgehen zu müssen ... nur die wenigen, die das Problem darstellen könnten.