sql >> Databáze >  >> RDS >> Sqlserver

SqlDataAdapter.Fill() – Přetečení převodu

Ačkoli je datová sada povolena pro „vyplnění“ datového adaptéru, obvykle jsem místo toho použil DataTable, protože při dotazování očekávám pouze jednu sadu výsledků. Když jsem to řekl, předběžně bych se zeptal na tabulku, jen abych získal její strukturu... něco jako

select whatever from yourTable(s) where 1=2

Tím získáte sloupce očekávaných výsledků, když provedete

DataTable myTable = new DataTable();
YourAdapter.Fill( myTable );

Nyní, když máte lokální tabulku, která neselže pro velikost obsahu, protože nebudou vráceny žádné záznamy, můžete nyní explicitně přejít na příslušný sloupec a nastavit jeho datový typ / informace o velikosti, jak potřebujete...

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

NYNÍ je vaše místní schéma legitimní a problémový sloupec bude identifikován s jeho přesností. Nyní vložte svůj správný dotaz se správnou klauzulí where a ne 1=2, abyste skutečně vrátili data... Protože v prvním průchodu nejsou žádné skutečné řádky, nemusíte ani provádět myTable.Clear() pro vymazání řádků... Stačí znovu spustit dotaz a dataAdapter.Fill() .

Ve skutečnosti jsem to nezkoušel, protože nemám vaše problémy s daty, abych simuloval stejný problém, ale teoretický proces by vás měl obejít, aniž byste museli explicitně procházet všechny sloupce... jen těch několik, které mohou představovat problém.



  1. Nastavení NLS_NUMERIC_CHARACTERS pro desetinné místo

  2. AsyncQuery s postgresql a dapper pomocí npqsql

  3. Návrh databáze:1 tabulka nebo 2?

  4. Nejrychlejší způsob, jak odstranit nečíselné znaky z VARCHAR v SQL Server