如何将 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.VarChar
或 SqlDbType.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
的顺序
我的控制器中有 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.VarChar
或 SqlDbType.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