SqlCommand用“?”替换“æ”

时间:2013-08-09 07:24:48

标签: c# sql sql-server character-encoding

重置数据库数据的方法存在问题。

在我们SqlCommand的命令文本中

...
INSERT INTO DA VALUES('lblUsername', 'Æ');
INSERT INTO DA VALUES('lblPassword', 'Ø');
...

这些特殊字符将替换为?

但是,如果我们将Æ作为参数插入

 SqlCommand cmd = new SqlCommand();
 cmd.Connection = Connection;
 cmd.CommandText = "INSERT INTO Customers VALUES(@value)";

 cmd.Parameters.AddWithValue("@value", "æ");

正确插入了æ并被视为æ而不是?

如何做到这一点,是否可以在SqlCommand上设置属性以避免使用SqlParameters插入所有测试数据?

数据库是microsoft sql server 10.0.1600。

表格定义

CREATE TABLE DA(
KeyWord NVARCHAR(100) NOT NULL,
ValueText NVARCHAR(200) NOT NULL
);

插入表DA

INSERT INTO DA VALUES('btnSaveChanges', 'Gem ændrigner');

2 个答案:

答案 0 :(得分:2)

如果你知道你的字段将包含非ASCII字符,那么你可能最好开始使用为Unicode“构建”的NCHAR / NVARCHAR,所以如果有人想要一个阿拉伯用户名系统不会给出“随机”的结果。

然后:

INSERT INTO DA VALUES('lblUsername', N'Æ');
INSERT INTO DA VALUES('lblPassword', N'Ø');

请参阅N?它表示Unicode字符串。

啊......请开始使用SqlParameter。不使用它就像用剪刀跑。我认为 Exploits of a Mom 是SQL程序员应该阅读的最重要的条带。

答案 1 :(得分:0)

您应该知道如何在SQL中处理ASCII字符。 如果直接使用'Æ',SQL不知道它是什么,只知道它的ASCII数。 如果使用String,SQL将直接获取信息。