我正在使用SQL数据库开发ASP.NET C#Web应用程序。
我有一个“注意”列,我想存储例如文本“< test
>”。
我在数据类型“Varchar”和“Text”上设置了列。
但HeidiSQL发布了一个错误。 (SQL Fehler(402):数据类型text和varchar在等于运算符中是不兼容的)
您是否知道如何存储此文字“< test
>”在我的数据库?
我使用的陈述是:
var sql="INSERT INTO Notes (Note) VALUES ('" + txtNew.Text.Replace("'","''") + "');
答案 0 :(得分:1)
您没有提到您正在使用的数据库,尽管问题出现在所有数据库中且解决方案是相同的。
nvarchar
等Unicode文本类型,或者对那些不熟悉的用户(如MySQL)使用UTF8排序规则。 N
来完成的,例如N'my unicode text'
您还应该从不使用text
,ntext
,varchar(max)
或nvarchar(max)
值,因为所有这些都是BLOB类型。它们用于存储大数据(最多2 GB),因此它们存储在普通表存储之外,从而导致大量性能命中。
<强>更新强>
我刚刚在评论中注意到,毕竟没有涉及特殊字符,只是字符串连接出错了。应该不惜一切代价避免字符串连接,因为:
<text>
某人输入moo');truncate table Notes;--
,则显示图片)为了避免将来出现此类错误,您应该使用参数化查询,这样您就可以传递任何值而无需转换,编码或格式化错误。实际的代码实际上更清晰,例如:
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参数类型。
答案 1 :(得分:0)
如果您使用的是SQL SERVER,请使用'<test>'
(单引号)。