使用SqlDataReader读取SQL返回的GUID字符串时抛出InvalidCastException
问题原因解析
GetGuid()的类型限制:SqlDataReader.GetGuid()方法仅支持直接读取SQL Server中**uniqueidentifier类型**的字段。它是直接将数据库存储的二进制GUID数据映射为.NET的Guid对象,不具备自动转换字符串格式GUID的能力。- 类型不匹配触发异常:你的SQL返回的是字符串类型(
varchar/nvarchar)的GUID值,底层数据类型和GetGuid()期望的uniqueidentifier不匹配,因此抛出InvalidCastException。 Guid.Parse()的逻辑差异:reader.GetString(1)先读取字符串格式的返回值,再通过Guid.Parse()完成字符串到Guid类型的格式解析,这属于业务层面的类型转换,和GetGuid()依赖数据库底层类型的直接映射逻辑完全不同,所以能成功执行。
如果想直接使用GetGuid(),可以在SQL查询中把字符串列转换为uniqueidentifier类型后返回,示例:
SELECT CAST(your_guid_string_column AS uniqueidentifier) FROM your_table
内容的提问来源于stack exchange,提问作者Ian Hannah
相关产品推荐
相关产品推荐

