更新 SQL Server 数据库中的希伯来语文本以“???".



我正在编写一个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 语句在正确的时间释放它。不用担心效率方面 - 内置连接池将处理这个问题。

最新更新