C#SQL DataTable:添加自定义类型的列

时间:2018-10-11 12:33:00

标签: c# sql types datatable ado

我想使用表值参数在SQL数据库(MSSQL 2008 R2)上调用存储过程。我可以像这样

var table = new DataTable();
table.Columns.Add(new DataColumn("Col1", typeof(int)));
table.Columns.Add(new DataColumn("Col2", typeof(string)));

table.Rows.Add(55, "hello");
table.Rows.Add(66, "goodbye");

然后稍后我构造一个SqlParameter对象,其类型为SqlDbType.Structured,其值为table。一切正常。

DataTable支持的列类型集似乎是固定的。大多数SQL原语类型具有等效的C#,但是没有任何直接对应于MSSQL支持的date类型。当然,我们在C#中有DateTime,但这是更笼统的。碰巧的是,我有自己的简单类MyDate来表示日期。它支持一种转换方法ToDateTime()

我想教DataTable有关这种新类型的信息,以便我能够做到

table.Columns.Add(new DataColumn("DateColumn", typeof(MyDate)));
table.Rows.Add(new MyDate(2018, 10, 11));

当前,如果我尝试这样做,我将得到

System.ArgumentException:
The type of column 'DateColumn' is not supported.
The type is 'MyDate'

MyDate是否应实现某些接口,以便DataTable支持它?理想情况下,我想指定一个到DateTime的转换,显然已经由DataTable处理了。我真的不想一直在整个SQL堆栈中添加对自定义类型的支持,直到在网络上对其进行编码(SqlUserDefinedAggregate似乎就是这样)。

我尝试实现IConvertibleISerializable;这并不是说。我希望System.Data.SqlTypes命名空间包含一个我可以使用的SqlDate类型,而不是我的自定义类型,但是我没有。

很明显,我可以只使用DateTime并在添加值时进行转换。到目前为止,这就是我所做的。但是我的很多代码库中都使用了MyDate类型(惯例是将其用于日期,而在需要日期和时间的同时使用DateTime),SQL {{1} }类型用于数据库中,如果可以的话,我想使代码更整洁。因此,我问,如何使date支持此自定义类型,或一般而言,自定义类型?

0 个答案:

没有答案
相关问题