在c#端为SQL设置非拉丁字母

本文关键字:拉丁字母 设置 SQL 端为 | 更新日期: 2023-09-27 18:11:09

问题是当用户插入non-Latin单词到数据库时,如果排序不设置为alphabet,单词就像' ????? ',但如果用户插入像N'word'这样的单词或我像N'word'一样选择它,则没有问题。
我在C#侧使用hastable function,所以是否有任何解决方案可以自动使用N'word'格式,或者每次调用函数时必须在文本之前使用N ?
我已经使用NVARCHAR格式了。

问的简单方法;
我不想每次从数据库中选择项目时都使用N'word'格式。
是否有任何触发器、存储过程或函数用于在我选择的文本之前自动添加N ?

在c#端为SQL设置非拉丁字母

你根本不应该使用N'word'格式,你应该使用参数。当您将值连接到字符串中以创建查询时,除非您设法正确转义所有输入,否则很容易受到SQL注入攻击。

在查询中输入参数,并将值添加到命令的Parameters集合中。例子:

string query = "select Id from Persons where Name = @Name";
using (SqlCommand cmd = new SqlCommand(query, connection)) {
  cmd.Parameters.Add('@Name', SqlDbType.NVarChar, 50).value = name;
  using (SqlDataReader reader = cmd.ExecuteReader()) {
    while (reader.Read()) {
      ...
    }
  }
}

为参数使用unicode类型(如NVarChar)确保参数值以unicode格式发送,相当于N'word'格式。

为什么不使用某种ORM呢?Dapper是一个轻量级ORM:https://github.com/StackExchange/dapper-dot-net

如果这是你遇到的麻烦,它将解决你的问题参数传递