2

我对这个捷克字符有一个小问题ů。当从我的 C# 代码触发更新时,这个小虫子不会保存到我的 MS SQL 表中。

如果我在 SQL Management Studio 中手动添加它,它会按原样保存,并且它也会正常显示在网站上。

但是从 C# 中保存它的过程仅以u保存在表中的字符作为结束,而不是ů.

我的 DB 字段是 typenvarchar并且ntextDB 的排序规则是French_CI_AS. 我正在使用 MSSQL 2008。

代码:

SqlCommand sqlcomLoggedIn = new SqlCommand("UPDATE Table SET id = 1, title = 'Title with ů' WHERE id = 1", sqlCon, sqlTrans);
int status = sqlcomLoggedIn.ExecuteNonQuery();

有什么想法吗?

4

1 回答 1

7

直接的问题是您没有使用 unicode 文字。它必须是:

UPDATE Table SET id = 1, title = N'Title with ů' WHERE id = 1

N很重要。

更大的问题是您应该使用参数:

int id = 1;
string title = "Title with ů";
// ^^ probably coming from C# parameters

using(var sqlcomLoggedIn = new SqlCommand(
    "UPDATE Table SET title = @title WHERE id = @id", sqlCon, sqlTrans))
{
    sqlcomLoggedIn.Parameters.AddWithValue("id", id);
    sqlcomLoggedIn.Parameters.AddWithValue("title", title);
    int status = sqlcomLoggedIn.ExecuteNonQuery();
}

然后问题就消失了,您可以使用缓存的查询计划,避免 sql 注入

于 2013-03-07T12:16:59.533 回答