更新 SQL 服务器数据库中的希伯来文文本以“???”结尾

Updating Hebrew text in SQL Server database end up with "???"

我正在编写 C# 程序以将数据输入 SQL Server 2008 数据库。

我使用以下函数将信息输入数据库

public bool AddSupplier(string name, string contactPerson, string telephone, string fax, string type, string payment, string comments)
{
        _cmd.CommandText =
            "INSERT INTO suppliers (name,contactPerson,telephone,fax,type,payment,active,comments) VALUES (@name,@contactPerson,@telephone,@fax,@type,@payment,@active,@comments);";
        _cmd.Parameters.Clear();
        _cmd.Parameters.AddWithValue("@name", name);
        _cmd.Parameters.AddWithValue("@contactPerson", contactPerson);
        _cmd.Parameters.AddWithValue("@telephone", telephone);
        _cmd.Parameters.AddWithValue("@fax", fax);
        _cmd.Parameters.AddWithValue("@type", type);
        _cmd.Parameters.AddWithValue("@payment", payment);
        _cmd.Parameters.AddWithValue("@active", 1);
        _cmd.Parameters.AddWithValue("@comments", comments);
        _con.Open(); 
        _cmd.ExecuteNonQuery(); 
        _con.Close();
        return true; 
    }

这很好用,我可以用希伯来语添加信息,它会显示在数据库中。

当我尝试使用此功能对其进行编辑时

public bool EditSupplier(int supplierId,string name, string contactPerson, string telephone, string fax, string type, string payment, string comments)
{
        _cmd.CommandText = "UPDATE suppliers SET name='" + name + "' ,contactPerson='" + contactPerson + "',telephone='" + telephone +
                           "',fax='" + fax + "',type='" + type + "',payment='" + payment + "',comments='" + comments +
                           "' WHERE supplierId =" + supplierId + ";";
        _con.Open(); 
        _cmd.ExecuteNonQuery();
        _con.Close();
        return true; 
}

我最终得到的是 ??? 而不是希伯来语输入

只需对更新命令和插入命令使用参数化SQL。你应该这样做 无论如何 以防止 SQL 注入攻击 - 事实上它与非 ASCII 字符一起玩得更好是一个好处。

(IIRC,如果你真的必须使用N'...'中的文字,但我强烈建议你不要这样做。)

此外,每次要使用数据库时,最好创建一个新的连接和命令,并在适当的时候使用using语句处理它。不要担心效率方面的问题 - 内置连接池会处理这个问题。