Database 如何在空表中获得正确的DataColumn数据类型?

Database 如何在空表中获得正确的DataColumn数据类型?,database,sqlite,ado.net,Database,Sqlite,Ado.net,我正在编写一些C#代码,该代码基于大量动态数据创建一个新的Sqlite数据库,我被困在一个部分,它试图确定是否需要为新数据创建或更改列 通过获取数据表并查看数据列数据类型和大小来处理表的现有方法,在创建新表的过程中似乎不起作用,因为DataColumn.DataType始终是System.Object,在所有以前的情况下,它已填充了用于创建表的正确类型,例如大小为128的字符串。它是用非常简单的代码检索的 IDbCommand cmd = new SQLiteCommand("SELECT *

我正在编写一些C#代码,该代码基于大量动态数据创建一个新的Sqlite数据库,我被困在一个部分,它试图确定是否需要为新数据创建或更改列

通过获取数据表并查看数据列数据类型和大小来处理表的现有方法,在创建新表的过程中似乎不起作用,因为DataColumn.DataType始终是System.Object,在所有以前的情况下,它已填充了用于创建表的正确类型,例如大小为128的字符串。它是用非常简单的代码检索的

IDbCommand cmd = new SQLiteCommand("SELECT * FROM Table", connection);
reader = cmd.ExecuteReader ();
dt.Load (reader);
我手动添加了一行和一个填充的列,然后瞧!它正确返回大小为128的字符串。既然它使用的是数据库模式(查找长度128),而不是我添加的行中的数据,为什么它不能处理空表

是否有人可以建议解决方法?

SQLite使用,因此在创建表时不需要使用任何特定的数据类型。
(读取查询的列类型没有多大意义,因为您可以在同一列中获取另一种类型的值。)

对于SQLite本身也是如此,但在创建DataTable的每个其他实例中创建DataTable时,ADO.Net将键入DataTable的DataColumns。例如,在设置为text(32)的Sqlite数据库列中放置一个包含40个字符的文本字符串。当ADO.Net尝试为包含此记录/列的查询创建DataTable时,您将从加载中获得一个失败的约束错误。只有当表为空时,这种情况才会明显发生。即使在查询中使用“WHERE 1=2”,因此它不会返回任何结果,但如果表包含数据,则会得到类型化的DataColumns。