-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDataReaderSchemaTable.cs
More file actions
65 lines (57 loc) · 2.4 KB
/
Copy pathDataReaderSchemaTable.cs
File metadata and controls
65 lines (57 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
namespace DataBoss.Data
{
public class DataReaderSchemaTable : IEnumerable<DataReaderSchemaRow>
{
readonly List<DataReaderSchemaRow> rows = new();
public int Count => rows.Count;
public DataReaderSchemaRow this[int index] => rows[index];
public void Add(string name, int ordinal, Type dataType, bool allowDBNull, int? columnSize = null, string dataTypeName = null, Type providerSpecificDataType = null) {
var o = rows.Count;
rows.Add(new DataReaderSchemaRow {
ColumnName = name,
Ordinal = ordinal,
DataType = dataType,
ProviderSpecificDataType = providerSpecificDataType ?? dataType,
AllowDBNull = allowDBNull,
ColumnSize = columnSize,
DataTypeName = dataTypeName,
});
if (o != ordinal)
rows.Sort((a, b) => a.Ordinal.CompareTo(b.Ordinal));
}
public int GetOrdinal(string name) {
var n = rows.FindIndex(x => x.ColumnName == name);
return n != -1 ? n : throw new InvalidOperationException($"No column named '{name}' found");
}
public DataTable ToDataTable() {
var schema = new DataTable();
var columnName = schema.Columns.Add(DataReaderSchemaColumns.ColumnName);
var columnOrdinal = schema.Columns.Add(DataReaderSchemaColumns.ColumnOrdinal);
var columnSize = schema.Columns.Add(DataReaderSchemaColumns.ColumnSize);
var allowDBNull = schema.Columns.Add(DataReaderSchemaColumns.AllowDBNull);
var dataType = schema.Columns.Add(DataReaderSchemaColumns.DataType);
var dataTypeName = schema.Columns.Add(DataReaderSchemaColumns.DataTypeName);
var isKey = schema.Columns.Add(DataReaderSchemaColumns.IsKey);
var providerSpecificDataType = schema.Columns.Add(DataReaderSchemaColumns.ProviderSpecificDataType);
foreach (var item in rows) {
var r = schema.NewRow();
r[columnName] = item.ColumnName;
r[columnOrdinal] = item.Ordinal;
r[columnSize] = item.ColumnSize ?? (object)DBNull.Value;
r[allowDBNull] = item.AllowDBNull;
r[dataType] = item.DataType;
r[providerSpecificDataType] = item.ProviderSpecificDataType;
r[dataTypeName] = item.DataTypeName;
r[isKey] = false;
schema.Rows.Add(r);
}
return schema;
}
public IEnumerator<DataReaderSchemaRow> GetEnumerator() => rows.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
}