更新 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
语句处理它。不要担心效率方面的问题 - 内置连接池会处理这个问题。
我正在编写 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
语句处理它。不要担心效率方面的问题 - 内置连接池会处理这个问题。