我对这个捷克人物ů
有一个小问题。当从我的C#代码触发更新时,这个小bugger将无法保存到我的MS SQL表中。
如果我在SQL Management Studio中手动添加它,它将按原样保存,并且它也会在网站上正常显示。
但是从C#保存它的过程只会在表格中保存的字符u
中结束,而不是ů
。
我的数据库字段属于nvarchar
和ntext
类型,数据库的排序规则为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();
有什么想法吗?
答案 0 :(得分: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注入