System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。

一、引起的源头

环境:vs2015,sqlserver2008

相关程序包:ef6

定义了一个实体article

public  class Article
{
    public string Data{get;set;}
}

EntityTypeConfiguration的配置

Property(a => a.Data).IsRequired().HasColumnType("text");

这样可以正常生成表字段,而且类型也正确
插入数据的时候,就引起了以下异常

System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。

二、解决

刚开始,以为是没有指定导致转换错误

[Column(TypeName="text")]
public string Data{get;set;}

再次插入数据,还是导致一样的错误

经过多次试验,

最后结果就是 不指定类型为text,系统自动指定类型为 nvarchar(MAX)

 

三、解析

 

按SQL2005来说,varchar如果有定义字符数,那么最大就是8000,超过会产生二进制截断。

而varchar(max)、nvarchar(max) 和 varbinary(max) 统称为大值数据类型。可以存储最大为 2^31-1 个字节的数据。

varchar ( max)
注解如下:
varchar [ ( n | max) ]
可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节.
在 Microsoft SQL Server 的未来版本中将删除 ntext、text 和 image 数据类型。请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。


当存储字符长度<=8000时,存储机制跟常规varchar一样,实际占用空间=字符长度+2(结束标识)。
当存储字符长度>8000时,存储机制跟text一样。

varchar(max)支持的最大长度是系统支持的最大长度,如在32位SQL Server上其最大长度为2G字节。

字符长度小于等于8000时,不管varchar还是varchar(max)都是存多少占多少。

 

 

 

 

时间: 2024-08-30 21:09:37

System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。的相关文章

数据类型 image 和 nvarchar 在 equal to 运算符中不兼容

问题描述 数据类型image和nvarchar在equalto运算符中不兼容,数据库中的字段格式是image.这怎么解决啊~~ 解决方案 解决方案二:使用linq?怎么会连接image呢?难道你的PK用image类型?解决方案三:在数据库里面改成nvarchar.解决方案四:text改为varchar解决方案五:楼主,解决了没有?我也遇到了一样的问题,怎么解决

new-求解!!“System.Data.SqlClient.SqlException”类型的异常

问题描述 求解!!"System.Data.SqlClient.SqlException"类型的异常 使用vs调试网站时候出现一下问题. "System.Data.SqlClient.SqlException"类型的异常在 System.Data.dll 中发生,但未在用户代码中进行处理 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接

System.Data.SqlClient.SqlException: &amp;amp;#x27;System&amp;amp;#x27; 附近有语法错误。

问题描述 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Data.SqlClient;usingSystem.Data;namespaceWebApplication1{publicpartialclasswjdc_xs1:System.Web.UI.Page{pro

调试中显示了System.Data.SqlClient.SqlException”类型的第一次机会异常在 System.Data.dll 中发生 的错误

问题描述 代码如下,查询不到数据库内的内容,总显示"没有成绩",报错调试中显示了System.Data.SqlClient.SqlException"类型的第一次机会异常在System.Data.dll中发生的错误sql语句是对的,在sqlserver里面试过可以查询代码如下:usingSystem;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Configuration;usingSystem.Collect

System.Data.SqlClient.SqlException: 无法打开登录所请求的数据库

  问题是这样的...我在VS2008直接运行打开网页,可以连接数据库...但通过输入地址,也可以打开网页,但涉及数据库就出问题... 无法打开登录所请求的数据库 "TakeClass".登录失败. 用户 '2D2727E2578F446ASPNET' 登录失败. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Data.SqlClient.SqlException: 无法打开

System.Data.SqlClient.SqlException 超时时间已到

错误信息: 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应. (错误详细信息等于 很可能由 IncludeExceptionDetailInFaults=true 创建的 Except

大神求解啊!!!System.Data.SqlClient.SqlException: 传递到 SUBSTRING 函数的长度参数无效。

问题描述 Seetheendofthismessagefordetailsoninvokingjust-in-time(JIT)debugginginsteadofthisdialogbox.**************ExceptionText**************System.Data.SqlClient.SqlException:传递到SUBSTRING函数的长度参数无效.atSystem.Data.SqlClient.SqlConnection.OnError(SqlExcepti

LINQToDataTable报错,System.Data.SqlClient.SqlException (0x80131904): Timeout 时间已到。

问题描述 System.Data.SqlClient.SqlException(0x80131904):Timeout时间已到.在操作完成之前超时时间已过或服务器未响应.--->System.ComponentModel.Win32Exception(0x80004005):等待的操作过时.在System.Data.SqlClient.SqlConnection.OnError(SqlExceptionexception,BooleanbreakConnection,Action`1wrapCl

System.Data.SqlClient.SqlException: 无法打开登录所请求的数据库 登录失败。_实用技巧

问题是这样的...我在VS2008直接运行打开网页,可以连接数据库...但通过输入地址,也可以打开网页,但涉及数据库就出问题... 无法打开登录所请求的数据库 "TakeClass".登录失败. 用户 '2D2727E2578F446\ASPNET' 登录失败. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Data.SqlClient.SqlException: 无法打开登