Ich habe folgende Hilfsfunktion für das Laden DataTable
basierend auf SQL SELECT für eine SQL Server-Datenbank (etwas vereinfacht):Wie erhalten Sie das ursprüngliche Schema auf SQL Server von SELECT, das DataTable füllt?
static private DataTable GetData_(string connectionString, string sqlSelect, bool doFillSchema = false)
{
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter(sqlSelect, connection))
{
DataTable table = new DataTable();
if (doFillSchema)
adapter.FillSchema(table, SchemaType.Mapped);
adapter.Fill(table);
return table;
}
}
Das spätere Ziel ist es, die zurück table
an eine andere Funktion übergeben, die den Inhalt exportieren sollte in eine DBF-Tabelle (dh CREATE TABLE und schreibe den Inhalt mit einigen Korrekturen, die sich auf die verschiedenen Fähigkeiten der Engines beziehen).
Das Problem ist, dass die Implementierung den ursprünglichen sagen numeric(10, 2)
Spaltentyp in Decimal
im Schema ändert. Ich möchte das Original bewahren.
Wenn ich es gut verstehe, muss ich wahrscheinlich eine andere DataTable schemaTable
mit dem ursprünglichen Schema bekommen (bevor die Spaltentypen vom Adapter geändert werden). Meine Idee war, die Funktion so zu ändern:
static private DataTable GetData_(string connectionString, string sqlSelect,
bool doFillSchema, ref DataTable schemaTable)
{
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter(sqlSelect, connection))
{
DataTable table = new DataTable();
if (doFillSchema)
??? fill the schema table
adapter.Fill(table);
return table;
}
}
Wie sollte die Funktionalität implementiert werden? Sollte die SqlDataAdapter
für den Zweck verwendet werden? Oder sollte es anders gemacht werden?