C# 在SQL数据库中存储特殊字符
我正在开发一个带有SQL数据库的ASP.NET C#Web应用程序 我有一个“Note”列,我想在其中存储例如文本“”。 我在数据类型“Varchar”和“Text”上设置了列 但HeidiSQL提出了一个错误。(SQL Fehler(402):数据类型text和varchar在等于运算符中不兼容) 您知道如何将此文本“”存储在数据库中吗 我使用的声明是: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("'"
var sql="INSERT INTO Notes (Note) VALUES ('" + txtNew.Text.Replace("'","''") + "');
如果您使用的是SQL SERVER,请使用
'
(单引号)
另请看一看您没有提到您正在使用的数据库,尽管问题发生在所有数据库中,并且解决方案是相同的
- 在支持Unicode文本类型的数据库(如SQL Server、Oracle)中,应该始终使用Unicode文本类型,如
,或者在不支持Unicode文本类型的数据库(如MySQL)中使用UTF8排序规则李>nvarchar
- 应使用参数化查询输入数据,以避免编码转换错误
- 如果绝对不可能使用参数化查询(无法想象为什么),那么应该使用数据库的语法来传递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中。。。但是符号是不允许的…不要使用字符串连接,这是一个灾难的配方,因为你发现了!
没有错,这句话是错的