.net Core中SqlHierarchyId的数据类型查询转换报错

项目类包配置

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
	  <TargetFramework>net6.0</TargetFramework>
	  <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Dapper" Version="2.1.15" />
    <PackageReference Include="Microsoft.SqlServer.Types" Version="160.1000.6" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
  </ItemGroup>

</Project>

示例代码及表结构

CREATE TABLE Test01(
id INT PRIMARY KEY IDENTITY,
nPid sys.HIERARCHYID NULL
)


--示例数据
INSERT INTO dbo.Test01(nPid)
VALUES('/7/'),('/7/1/')
using Dapper;
using Microsoft.SqlServer.Types;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary1
{
    public class Simple2
    {
        public static void Main()
        {
            var sqlConnectionStr = "连接字符串";


            var sql = new SqlConnection(sqlConnectionStr);
            sql.Open();
            //使用object接收
            var c = sql.Query<object>("SELECT nPid FROM dbo.Test01").ToList();

            //使用实体接收
            var c1 = sql.Query<Test01>("SELECT nPid FROM dbo.Test01").ToList();
        }

        public class Test01
        {
            public SqlHierarchyId nPid { get; set; }
        }
    }
}

出现以下错误

Microsoft.SqlServer.Server.InvalidUdtException:“'Microsoft.SqlServer.Types.SqlHierarchyId' is an invalid user defined type, reason: no UDT attribute.”

原因

System.Data.SqlClient在core项目中不能识别到最新的core版本Microsoft.SqlServer.Types,需要对其降级到14.0.1016.290版本

解决方案

方案一、降级Microsoft.SqlServer.Types至14.0.1016.290版本

方案二、将System.Data.SqlClient替换至Microsoft.Data.SqlClient,因tsl协议不同,需要注意相应配置的改动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值