【发布时间】:2013-08-15 14:02:51
【问题描述】:
如果给定一个包含 SQL Server/T-SQL 数据类型的字符串,将字符串评估为 .Net 类型的最简单方法是什么?
例如,如果您有一个包含“nvarchar”的字符串,则转换方法返回的结果应该是System.String 类型。如果我有一个包含“int”的字符串,结果应该是一个System.Int32 Type 对象。
我可以轻松编写一个函数,该函数接受一个 SQL 数据类型字符串,并通过一个返回 .Net Type 对象的 switch/case 语句发送该字符串。但是,我不确定 .Net 框架中是否有一个我忽略的函数已经这样做了。
将 SQL Server 数据类型解析为 .Net 数据类型的最简单/正确的方法是什么?
附加上下文
在我的例子中,我实际上有一个存储过程,它返回一些关于数据的元信息。具体来说,返回一个字符串字段,其中包含一个 sql-type 值,该值可以是 SQL Server 2005 中可用的任何 sql-type。
我的存储过程有可能返回任何 sql 类型——int、smallint、datetime、binary 等。我需要采用这种数据类型并将其转换为 .Net @ 987654328@ 对象。
下面 Matthew 的评论确实提供了所有必要的映射信息,直接来自 Microsoft 的文档,但我再次想知道 System.Data 或 System.Data.SqlClient 命名空间中是否集成了一些东西。
【问题讨论】:
-
SQL-CLR 类型映射:msdn.microsoft.com/en-us/library/bb386947.aspx
-
如果一个字符串包含来自 SQL 的一些数据,那么该数据当前是一个字符串。也许一些上下文会有所帮助。
-
就像@Matthew 所说,SQL-CLR 类型映射是您所需要的。
-
不太确定你打算在 .NET 中用它做什么。将其简单地存储在 var 中对您的目的不起作用吗?
-
@Ellesedil:如果建议将从 SQL 返回的数据存储为
var,那不是我工作的重点。就我而言,我需要知道如何处理将插入(或更新)到数据表中的数据。如果我没有任何要评估的数据,我就无法导出正确的数据类型以存储在我的数据库中。具体来说,如果您从 SQL Server 获得空值,.Net 会将空值转换为 DBNull 对象,这不会告诉我有关基础列定义的任何信息。