如何将 ICollection<string> 插入到 ADO.NET 中的一个字段中?

How to insert a ICollection<string> into one Field in ADO.NET?

我的控制器中有 ICollection 对象。这个集合是从这样的视图发布的;

{string[3]}

[0]=a

[1]=b

[2]=c

        public ActionResult TarifEkle(Tarifler tarif, ICollection<string> tAdim)
     {
        string mainconn = ConfigurationManager.ConnectionStrings["Tarif"].ConnectionString;
        SqlConnection sqlconn = new SqlConnection(mainconn);
        string sqlquery = "insert into [NePisirsem].[dbo].[Tarifler](tAdim) values (@builder)";
        SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn);
        sqlconn.Open();

我和我的建造者一起改变这个值,像这样 a,b,c;

         var builder = new System.Text.StringBuilder();
            foreach (string item in tAdim)
        {
          builder.Append(item).Append(",");
             sqlcomm.Parameters.AddWithValue("@builder", tarif.tAdim);
        }

它的工作价值成功成为我想要的 (a,b,c) 但我不能这样添加这个价值 a,b,c
sqlcomm.Parameters.AddWithValue("@builder", tarif.tAdim); 此代码始终只取第一个值 a 而不是全部。

我该怎么办?

您需要更改以下部分

     var builder = new System.Text.StringBuilder();
        foreach (string item in tAdim)
    {
      builder.Append(item).Append(",");
         sqlcomm.Parameters.AddWithValue("@builder", tarif.tAdim);
    }

    sqlcomm.Parameters.AddWithValue("@builder", string.Join(",", tAdim));
如果您需要 a, b, c"," 替换为 ", "sqlquery 中的

@builder 将被替换为 a,b,c。阅读更多关于 string.Join() here.

不要使用 AddWithValue()

如您所见,here, you should prefere Parameters.Add() over Parameters.AddWithValue() as you can specify the appropriate SqlDbType 您的字符串已转换为。

sqlcomm.Parameters.Add("@builder", SqlDbType.VarChar, 30).Value = string.Join(",", tAdim);

使用 SqlDbType.VarCharSqlDbType.NVarChar 并将 30 替换为您的实际最大长度。


插入语句

here 所述,插入语句的格式如下所示:

INSERT INTO table_name (column_list)
VALUES
    (value_list_1),
    (value_list_2),
    ...
    (value_list_n);

column_list 是您的情况下 [NePisirsem].[dbo].[Tarifler] 上的列列表,例如tAdim。然后可以提供多个 value_lists,每个都在您的 table 中生成一个新行。 value_list需要匹配column_list

的顺序