当前位置: 首页 > 面试题库 >

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

潘佐
2023-03-14
问题内容

我有一个经典的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( );
    }


 类似资料:
  • 问题内容: 在Swift中,调用第一个参数时会使用参数名称。为什么不使用名字? 使用Swift手册的变体; 这会起作用; 但这给了我“调用中的外部参数标签’amount’” 是否有这个原因,或者这是“按其原样”的事物之一? 问题答案: 这是遵循Objective-C习惯的惯例,第一个参数的名称与方法名称结合在一起。这是一个例子: 您可以像这样调用方法: 通过将参数的名称合并到方法的名称中,可以使阅

  • 问题内容: 这是我的问题:我想检查名称已参数化的表中的行,如。X的值来自另一个表,例如,在我的主表中,我有一列和一列X,要连接的表的名称为table_X,毫无疑问,它存在,并且具有相同的column ,我将其连接,以检查该表中是否有值。 我尝试过一个视图,但是没有成功,因为我无法在视图中放置参数化的表名。我可以参数化where子句和其他东西,但是没有表名。 我已经尝试过一个程序 PREPARE s

  • 我下载了Visual Studio2015和SQL Data Tools 2015,因为我正在尝试制作一个简单的SSIS包,用于将一些数据行从服务器上的db中的表复制到另一个服务器上的另一个db中的表。我有一些复杂的问题使我的工作更加困难,例如需要动态地构建表名。到目前为止,我已经创建了一个执行Sql任务,用于删除目标表中的数据,以避免重复行。在输出中,我附加了一个数据流活动,包括一个Ole db

  • 问题内容: 在JUnit4中使用参数化测试时,是否可以设置自己的自定义测试用例名称? 我想将默认设置更改为有意义的设置。 问题答案: 此功能使其成为JUnit 4.11的一部分。 要使用更改参数化测试的名称,请说: 是一个字符串,可以具有以下特殊的占位符: - the index of this set of arguments. The default is . - the first para

  • 问题内容: 我有2个表格,Products和ShoppingCart,我想根据ShoppingCart中指定的产品名称和数量来更新和减少Products表中产品的“数量”。我怎样才能做到这一点? 表:产品字段:产品名称,产品数量 表:购物车字段:ProductName,ProductQty 访问数据库 问题答案: 您应该有一个产品ID。然而: 您还应该在字段和表名中删除空格。

  • 我正在跟随Laravel的购物车教程,但即使我已经将他的代码复制到了点子上,它也不像教程中那样工作。每次你点击一个产品时,购物车的数量应该会增加,但事实并非如此。 我正在学习Max Schwarzmueller的“Laravel购物车”教程,您可以在youtube上找到:https://www.youtube.com/watch?v=56TizEw2LgI 我是php、laravel和sessio