SQL

使用未知名称/参数数量更新sql语句

发布于 2021-04-09 20:50:21

我有一个经典的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列正在更新。这不是很有效吗?

关注者
0
被浏览
60
1 个回答
  • 面试哥
    面试哥 2021-04-09
    为面试而生,有面试问题,就找面试哥。

    你需要做这样的事情....显然需要更多的编码....

     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( );
        }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看