【问题标题】:sqlCommand object and adding parameters using loopsqlCommand 对象并使用循环添加参数
【发布时间】:2012-08-16 14:44:46
【问题描述】:

我们可以使用 foreach 清除表单中的所有文本框,而无需为每个文本框输入代码来清除它们。

com.Parameters.Add(new SqlParameter("@",objPlayrInjr_P));

using (SqlCommand com = new SqlCommand())
{
    com.CommandText = "SPname";
    com.Connection = connection object;
    com.CommandType = CommandType.StoredProcedure;

    com.Parameters.Add(new SqlParameter("@SqlParameterName",objectName.propertyName));
}

我需要一种通过循环将sqlParameters 添加到Command 对象的方法,就像我在清除文本框时所做的那样。所以不需要为每条语句编写代码,它会由循环完成。

【问题讨论】:

  • 要遍历一个循环,你需要一个参数名称和属性值的列表。
  • 我建议只使用标准方法来添加参数。将它们保存在数据层/类中。我认为尝试提供参数列表或使用参数名称标记域对象不会节省很多时间。
  • 我的第一个问题是你尝试过什么?请显示您尝试过的代码示例。如果您还没有尝试过任何事情 - 请使用“The Google”来帮助您。我们都非常乐意提供帮助 - 但请“帮助我们帮助您”。

标签: c# sqlcommand


【解决方案1】:

这里是使用注解的东西:

用参数名称标记属性的注解

[AttributeUsage(AttributeTargets.Property)]
public class ParameterAttribute : Attribute
{
    public string ParameterName { get; private set; }

    public ParameterAttribute(string parameterName)
    {
        ParameterName = parameterName;
    }
}

示例类

public class Person
{
    [Parameter("FirstName")]
    public string FirstName { get; set; }

    [Parameter("LastName")]
    public string LastName { get; set; }

    [Parameter("EmailAddress")]
    public string Email { get; set; }
}

用法

SqlCommand command = new SqlCommand();

Person person = new Person()
{
    FirstName = "John",
    LastName = "Doe",
    Email = "johndoe@domain.com"
};

foreach (var pi in person.GetType().GetProperties())
{
    var attribute = (ParameterAttribute)pi.GetCustomAttributes(typeof(ParameterAttribute), false).FirstOrDefault();

    if (attribute != null)
    {
        command.Parameters.AddWithValue(string.Format("@{0}", attribute.ParameterName), pi.GetValue(person, null));
    }
}

【讨论】:

    【解决方案2】:

    一种方法是将参数名称和值放在Dictionary<string, object> 中,然后

    foreach (KeyValuePair<string, object> param in params)
    {
        com.Parameters.AddWithValue(param.Key, param.Value);
    }
    

    【讨论】:

    • 你会建议这样做吗?您的表单模型将完全由任意值的字典组成。
    • 什么表格型号?除了他希望能够在循环中设置 SqlParameter 之外,没有给出问题的上下文。对“表单”的唯一引用是可以在表单上使用 foreach 来清除文本框。在基于用户输入设置复杂查询时,我正是这样做的(例如,用户可以选择 1..N 个成为 IN 子句一部分的键)。
    猜你喜欢
    • 2020-04-22
    • 2016-03-17
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2021-06-01
    相关资源
    最近更新 更多