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