我的控制器中有ICollection对象。此收藏集是从这样的视图发布的;
null
{string[3]}
[0]=a
[1]=b
[2]=c
我使用我的构建器像a,b,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();
它成功地使值成为我想要的 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);
,而不是全部使用。
我该怎么办?
答案 0 :(得分:2)
您需要更改以下部分
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));
如果需要@builder
将a,b,c
替换为sqlquery
,则在您的{{1}中将 a, b, c
替换为","
。详细了解", "
here。
string.Join()
您可以阅读here,因此,AddWithValue()
比Parameters.Add()
更可取,因为您可以指定将字符串转换为的适当SqlDbType。
Parameters.AddWithValue()
使用sqlcomm.Parameters.Add("@builder", SqlDbType.VarChar, 30).Value = string.Join(",", tAdim);
或SqlDbType.VarChar
并将SqlDbType.NVarChar
替换为您的实际最大长度。
如here所述,insert语句的格式如下:
30
INSERT INTO table_name (column_list)
VALUES
(value_list_1),
(value_list_2),
...
(value_list_n);
是您在column_list
上的列的列表,例如[NePisirsem].[dbo].[Tarifler]
。然后可以提供多个tAdim
,每个value_lists
在表中生成一个新行。 value_list
必须与column_list