gpt4 book ai didi

c# - 给定一个作为字符串的 T-SQL 类型,将其评估为 .Net 类型的最简单方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:31:57 26 4
gpt4 key购买 nike

如果给定一个包含 SQL Server/T-SQL 数据类型的字符串,将字符串评估为 .Net 类型的最简单方法是什么?

例如,如果您有一个包含“nvarchar”的字符串,转换方法返回的结果应该是 System.String 类型。如果我有一个包含“int”的字符串,结果应该是一个 System.Int32 类型对象。

我可以轻松地编写一个函数,该函数采用 SQL 数据类型字符串并通过返回 .Net 类型对象的 switch/case 语句发送该字符串。但是,我不确定 .Net 框架中是否隐藏了一个我忽略了的功能,它已经做到了这一点。

将 SQL Server 数据类型解析为 .Net 数据类型的最简单/正确的方法是什么?

附加上下文

在我的例子中,我实际上有一个存储过程,它返回一些关于数据的元信息。具体来说,返回一个字符串字段,其中包含一个 sql 类型的值,该值可以是 SQL Server 2005 中可用的任何 sql 类型。

我的存储过程有可能返回任何 sql 类型——intsmallintdatetimebinary 等。我需要获取此数据类型并将其转换为 .Net Type 对象。

Matthew 下面的评论确实提供了所有必要的映射信息,这些信息直接来自 Microsoft 的文档,但是,我再次想知道 System.DataSystem.data 中是否集成了一些东西。 Data.SqlClient 命名空间。

最佳答案

据我所知,没有任何暴露的内容。在 System.Data.SqlClient 代码的深处有一个用于确定类型映射的函数:

internal Type GetTypeFromStorageType(bool isSqlType)
{
if (isSqlType)
{
switch (this._type)
{
case StorageType.Empty:
return null;

case StorageType.Boolean:
return typeof(SqlBoolean);

case StorageType.Byte:
return typeof(SqlByte);

case StorageType.DateTime:
return typeof(SqlDateTime);

case StorageType.Decimal:
return typeof(SqlDecimal);

case StorageType.Double:
return typeof(SqlDouble);

case StorageType.Int16:
return typeof(SqlInt16);

case StorageType.Int32:
return typeof(SqlInt32);

case StorageType.Int64:
return typeof(SqlInt64);

case StorageType.Money:
return typeof(SqlMoney);

case StorageType.Single:
return typeof(SqlSingle);

case StorageType.String:
return typeof(SqlString);

case StorageType.SqlBinary:
return typeof(object);

case StorageType.SqlCachedBuffer:
return typeof(SqlString);

case StorageType.SqlGuid:
return typeof(object);

case StorageType.SqlXml:
return typeof(SqlXml);
}
}
else
{
switch (this._type)
{
case StorageType.Empty:
return null;

case StorageType.Boolean:
return typeof(bool);

case StorageType.Byte:
return typeof(byte);

case StorageType.DateTime:
return typeof(DateTime);

case StorageType.Decimal:
return typeof(decimal);

case StorageType.Double:
return typeof(double);

case StorageType.Int16:
return typeof(short);

case StorageType.Int32:
return typeof(int);

case StorageType.Int64:
return typeof(long);

case StorageType.Money:
return typeof(decimal);

case StorageType.Single:
return typeof(float);

case StorageType.String:
return typeof(string);

case StorageType.SqlBinary:
return typeof(byte[]);

case StorageType.SqlCachedBuffer:
return typeof(string);

case StorageType.SqlGuid:
return typeof(Guid);

case StorageType.SqlXml:
return typeof(string);
}
}
return null;
}

关于c# - 给定一个作为字符串的 T-SQL 类型,将其评估为 .Net 类型的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com