我有一个经典的ASP网站,正在逐步升级。我想创建一个函数来 安全地 更新SQL数据库,而无需手动指定参数。有点动态。
(我不想使用实体框架或Linq)
这是到目前为止的代码:
string updateSql = "UPDATE sometable" + "SET test1= @testData1 " + "WHERE a = @aData1"; SqlCommand UpdateCmd = new SqlCommand(updateSql, conn); UpdateCmd.Parameters.Add("@testData1 ", SqlDbType.NVarChar, 10, "testData1 "); UpdateCmd.Parameters.Add("@aData1", SqlDbType.NVarChar, 20, "aData1"); UpdateCmd.Parameters["@testData1 "].Value = "21515"; UpdateCmd.Parameters["@aData1"].Value = "32t3t"; UpdateCmd.ExecuteNonQuery();
伪代码(我要实现的目标)
创建一个涵盖所有变量的Ilist {get; 设置:} [在此处验证类型/长度]
对于每个包含值的变量(无验证问题),请创建sql更新字符串。
执行它。
可能的问题: 我可以预见的唯一问题是,列表可能有500个变量,但是每个SQL更新可能只有2或3列正在更新。这不是很有效吗?
你需要做这样的事情....显然需要更多的编码....
static void Main(string[] args) { var values = new Dictionary<string, object>( ); values.Add( "name", "timmerz" ); values.Add( "dob", DateTime.Now ); values.Add( "sex", "m" ); SqlUpdate( "sometable", values ); } public static void SqlUpdate( string table, Dictionary<string,object> values, string where ) { var equals = new List<string>( ); var parameters = new List<SqlParameter>( ); var i = 0; foreach( var item in values ) { var pn = "@sp" + i.ToString( ); equals.Add( string.Format( "{0}={1}", item.Key, pn ) ); parameters.Add( new SqlParameter( pn, item.Value ) ); i++; } string command = string.Format( "update {0} set {1} where {2}", table, string.Join( ", ", equals.ToArray( ) ), where ); var sqlcommand = new SqlCommand(command); sqlcommand.Parameters.AddRange(parameters.ToArray( ) ); sqlcommand.ExecuteNonQuery( ); }