C# 在SQL数据库中存储特殊字符

C# 在SQL数据库中存储特殊字符,c#,sql,asp.net,sql-server,C#,Sql,Asp.net,Sql Server,我正在开发一个带有SQL数据库的ASP.NET C#Web应用程序 我有一个“Note”列,我想在其中存储例如文本“”。 我在数据类型“Varchar”和“Text”上设置了列 但HeidiSQL提出了一个错误。(SQL Fehler(402):数据类型text和varchar在等于运算符中不兼容) 您知道如何将此文本“”存储在数据库中吗 我使用的声明是: var sql="INSERT INTO Notes (Note) VALUES ('" + txtNew.Text.Replace("'"

我正在开发一个带有SQL数据库的ASP.NET C#Web应用程序

我有一个“Note”列,我想在其中存储例如文本“”。 我在数据类型“Varchar”和“Text”上设置了列

但HeidiSQL提出了一个错误。(SQL Fehler(402):数据类型text和varchar在等于运算符中不兼容)

您知道如何将此文本“”存储在数据库中吗

我使用的声明是:

var sql="INSERT INTO Notes (Note) VALUES ('" + txtNew.Text.Replace("'","''") + "'); 

如果您使用的是SQL SERVER,请使用
'
(单引号)


另请看一看

您没有提到您正在使用的数据库,尽管问题发生在所有数据库中,并且解决方案是相同的

  • 在支持Unicode文本类型的数据库(如SQL Server、Oracle)中,应该始终使用Unicode文本类型,如
    nvarchar
    ,或者在不支持Unicode文本类型的数据库(如MySQL)中使用UTF8排序规则
  • 应使用参数化查询输入数据,以避免编码转换错误
  • 如果绝对不可能使用参数化查询(无法想象为什么),那么应该使用数据库的语法来传递Unicode值。在SQL Server中,这是通过在值之前添加
    N
    来完成的,例如
    N'my unicode text'
您也不应该使用
text
ntext
varchar(max)
nvarchar(max)
值,因为所有这些都是BLOB类型。它们用于存储大数据(高达2 GB),因此它们存储在正常表存储之外,从而导致性能大幅度下降

更新

我只是在评论中注意到,毕竟没有涉及特殊字符,只是字符串连接出错了。应不惜一切代价避免字符串连接,因为:

  • 它们容易出错
  • 它们使您的代码暴露于SQL注入攻击(如果有人输入了
    moo',而不是
    ,则显示图像);截断表注释--
  • 导致性能降低(服务器可以重用参数化查询的执行计划)
  • 难以编码和维护
为了避免将来出现此类错误,您应该使用参数化查询,它允许您传递任何值,而不会出现转换、编码或格式错误。实际代码实际上要干净得多,例如:

var myInsertCommand=new SqlCommand("INSERT into NOTES(Note) VALUES(@note)");
myInsertCommand.Parameters.Add("@note", SqlDbType.NVarChar,txtNew.Text.Length);
myInsertCommand.Parameters["@note"].Value = txtNew.Text;
myInsertCommand.ExecuteNonQuery();

如果您的字段实际上是一个blob,则可以使用SqlDbType.Text或SqlDbType.NText参数类型。

它不能是varchar类型,也不能是Text类型-它是哪种类型?请发布用于插入的脚本和架构。注意:如果是SQL Server,则数据类型文本已折旧。哪个数据库??SQL只是许多数据库使用的查询语言。像这样的事情是高度特定于供应商和产品的,所以请在您的问题中添加相关标签来澄清这一点!我的意思是我两个都试过了。。。。数据类型“varchar”和“text”插入Notes(Note)值(““+txtNew.text.Replace”(““,”)+”);这是我的插页。。。我在文本框中写入文本并将其存储在SQl Server中。。。但是符号是不允许的…不要使用字符串连接,这是一个灾难的配方,因为你发现了!
没有错,这句话是错的