c# - 特殊字符未保存在 MS SQL 中

标签 c# sql-server-2008 unicode encoding character-encoding

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

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

但是从 C# 保存它的过程只以字符 u 被保存在表中而不是 ů 结束。

我的数据库字段是 nvarcharntext 类型,数据库的排序规则是 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();

有什么想法吗?

最佳答案

直接的问题是您没有使用 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 注入(inject)

关于c# - 特殊字符未保存在 MS SQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270966/

相关文章:

delphi - 将 RTF 文本从数据库加载到 TRichEdit

c# - 引用实例化另一个的对象?

sql-server-2008 - 无论如何,您可以在 SSRS 2008 中停止数据驱动订阅吗?

sql - 实现 CTE

SQL 上的替换和 CAST 是否会影响数据库?

python - 使用 Python 从字符串中删除度数符号

c# - Wpf MVVM在DataGrid中选择/取消选择项目

c# - 无状态框架与独立的 Forks 一起工作?

c# - Lambda 表达式 `x => x.Property` 更改为 `x => Convert(x.Property)`

PHP MySQL 查询返回错误字符