日期:2014-05-17  浏览次数:20915 次

加密后的数据 char[] 类型那个保存到binrary的字段中?
比如说有个表 
下载数据的时候用到了 unhex() 函数
test 
 xm varchar(20),
 pw binrary(16);

如何把加密后的pw(char[8]) update到数据中,
如果将char[8]转成 string s1;


 string sql = string.Format("UPDATE testSET pw=hex('{0}') WHERE xm={1}",
                           s1 , name);
会不会有问题?

------解决方案--------------------
建议用参数

string sql = "UPDATE test SET pw = @p_pw WHERE xm = @p_xm";
……
//在command执行前,假设用的是OleDb
updateCmd.Parameters.Add("@p_pw", OleDbType.Binary).Value = s1;
updateCmd.Parameters.Add("@p_xm", OleDbType.VarChar).Value = name;
updateCmd.ExecuteNonQuery();



使用参数把数据传给SQL的好处:
1:同一条SQL语句可以多次使用,第一次使用时Command对象会把它编译好,省去每次编译的时间。
2:避免处理不同数据库对各种类型常量的表示法不同的问题
3:任何文本都不需要转义
4:可以避免SQL注入