Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sqlCommand对象并使用循环添加参数_C#_Sqlcommand - Fatal编程技术网

C# sqlCommand对象并使用循环添加参数

C# sqlCommand对象并使用循环添加参数,c#,sqlcommand,C#,Sqlcommand,我们可以使用foreach清除表单中的所有文本框,而无需为每个文本框键入代码来清除它们 com.Parameters.Add(new SqlParameter("@",objPlayrInjr_P)); using (SqlCommand com = new SqlCommand()) { com.CommandText = "SPname"; com.Connection = connection object; com.CommandType = CommandTy

我们可以使用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
添加到
命令
对象中,就像我清除文本框时所做的那样。因此,无需为每条语句编写代码,它将由循环完成。

一种方法是将参数名称和值放入
字典中,然后

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

一种方法是将参数名称和值放入
字典中,然后

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

下面是一些使用注释的内容:

用于标记具有参数名称的特性的注释 示例类 用法
下面是一些使用注释的内容:

用于标记具有参数名称的特性的注释 示例类 用法
要进行循环,您需要一个参数名和属性值的列表。我建议只使用标准方法添加参数。将它们保存在数据层/类中。我认为,如果您尝试在域对象中提供参数列表或使用参数名称标记域对象,将不会节省很多时间。我的第一个问题是您尝试了什么?请显示您尝试的代码示例。如果你没有尝试过任何东西,那么请使用“谷歌”来帮助你。我们非常乐意提供帮助,但请“帮助我们帮助您”。要进行循环,您需要一个参数名称和属性值的列表。我建议只使用标准方法添加参数。将它们保存在数据层/类中。我认为,如果您尝试在域对象中提供参数列表或使用参数名称标记域对象,将不会节省很多时间。我的第一个问题是您尝试了什么?请显示您尝试的代码示例。如果你没有尝试过任何东西,那么请使用“谷歌”来帮助你。我们都非常乐意提供帮助,但请“帮助我们帮助你”。尽管如此,你会推荐这样做吗?您的表单模型将完全由任意值的字典组成。什么表单模型?除了他希望能够在循环中设置SqlParameter之外,没有为这个问题提供上下文。对“表单”的唯一引用是可以在表单上使用foreach清除文本框。我在基于用户输入设置复杂查询时就是这样做的(例如,用户可以选择成为IN子句一部分的1..N个键)。不过,您建议这样做吗?您的表单模型将完全由任意值的字典组成。什么表单模型?除了他希望能够在循环中设置SqlParameter之外,没有为这个问题提供上下文。对“表单”的唯一引用是可以在表单上使用foreach清除文本框。我在基于用户输入设置复杂查询时就是这样做的(例如,用户可以选择1..N个键,这些键成为IN子句的一部分)。
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));
    }
}