【问题标题】:Concatenating multiple fields in C#在 C# 中连接多个字段
【发布时间】:2020-01-18 06:00:17
【问题描述】:

我正在开发一个 Windows Forms 应用程序,在该应用程序中,我有一个囚犯表格,其中包含有关囚犯及其家庭地址的所有基本信息以及所有信息。

我有两个组合框,一个是 State 的父组合框,另一个是 City 的子组合框。 City 组合框的值取决于从 State 组合框中选择的项目。

例如,如果 admin 从 State 组合框中选择“State1”,则 City 组合框中的值显示为“City1”、“City2”、“City3”等,如果 admin 从 State 组合框中选择“State2”,然后 City 组合框中的值显示为“City4”、“City5”、“City6”等。

我有这个来存储 City 组合框的值:

sql_com.Parameters.AddWithValue("@City", City_ComboBox.SelectedItem);

我只想知道,有没有办法在这段代码中连接多个字段。比如说,我有多个名为“City_ComboBox1”、“City_ComboBox2”和“City_ComboBox3”的城市组合框。

有没有办法让我做这样的事情:

sql_com.Parameters.AddWithValue("@City", City_ComboBox1.SelectedItem + City_ComboBox2.SelectedItem + City_ComboBox3.SelectedItem);

但我得到一个错误。

【问题讨论】:

  • 您是否要将所有选定的城市保存在一个字段中?虽然对于关系数据库来说这不是一个好主意,但如果你想这样做,至少你需要在城市名称之间使用, 这样的分隔符。
  • 表单上有几个组合框来存储几个选定的城市吗?好的,您可以将所有选定的城市带到字符串中。但是你将如何使用你保存在数据库中的这个字符串,名称是一一连接的?您必须使用一些分隔符(如@RezaAghaei 所说)或放置专用的 sql 参数(和 sql 字段)将每个城市分别存储在数据库中。

标签: c# sql-server database winforms


【解决方案1】:

有几种方法可以做到这一点。一种是使用string.Format() 方法。

string cityString = string.Format("{0} {1} {2}", City_ComboBox1.SelectedItem, City_ComboBox2.SelectedItem, City_ComboBox3.SelectedItem);
sql_com.Parameters.AddWithValue("@City", cityString);

string.Format 让您创建一个模板来满足您希望字符串的外观。您可以使用占位符{#},其编号对应于您传入的值的索引。您可以在模板中多次使用这些占位符。在第一个字符串值之后传递给方法的任何内容都将转换为字符串。

还值得注意的是,虽然AddWithValue 易于使用,但随着应用程序的增长,它可能会导致问题。建议使用

sql_com.Parameters.Add("@City", SqlDbType.NVarChar, 64).Value = cityString;

但是您将用与您设置的数据库列相匹配的值替换 NVarChar64。见https://www.dbdelta.com/addwithvalue-is-evil/

【讨论】:

    【解决方案2】:

    另一种简单的方法是使用Interpolated Strings$ 符号,如下所示:

    string cityString = $"{City_ComboBox1.SelectedItem} {City_ComboBox2.SelectedItem} {City_ComboBox3.SelectedItem}";
    sql_com.Parameters.AddWithValue("@City", cityString);
    

    通过在字符串前面和字符串内添加$,只需将任何变量放入花括号{variableName}

    【讨论】:

    • 每次将新记录添加到组合框时,您是否要编写新代码?
    • 我认为它们的组合框数量是恒定的,因此程序员可以随时检查是否有值并将其添加到字符串中,如果组合框的数量是动态的,我们可以循环遍历这些组合框使用索引并将其添加到字符串中。
    【解决方案3】:

    string.Concat

    sql_com.Parameters.Add("@City", SqlDbType.NVarChar, 64).Value = string.Concat(City_ComboBox1.SelectedItem, City_ComboBox2.SelectedItem, City_ComboBox3.SelectedItem)
    

    string.join

    var join = ",";
        sql_com.Parameters.Add("@City", SqlDbType.NVarChar, 64).Value = string.Join(join  ,City_ComboBox1.SelectedItem, City_ComboBox2.SelectedItem, City_ComboBox3.SelectedItem)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 2013-10-26
      • 2021-12-09
      • 1970-01-01
      相关资源
      最近更新 更多