C# 如何分割逗号分隔的值
我在gridview中有一个文本框,我正在执行和插入语句,循环遍历gridview中的每一行。我现在的问题是,文本框中可以有多个名称,如下所示:C# 如何分割逗号分隔的值,c#,asp.net,sql,gridview,C#,Asp.net,Sql,Gridview,我在gridview中有一个文本框,我正在执行和插入语句,循环遍历gridview中的每一行。我现在的问题是,文本框中可以有多个名称,如下所示: John Carter, Mike David, John Edward, 那么,如何将每个单独的名称拆分并插入到具有相同ID的表中呢?例如,如果当前行的ID=12,则我的表将如下所示: ID Full_Name 12 John Carter 12 Mike David 12 John Edward 这是我的密码:
John Carter, Mike David, John Edward,
那么,如何将每个单独的名称拆分并插入到具有相同ID的表中呢?例如,如果当前行的ID=12,则我的表将如下所示:
ID Full_Name
12 John Carter
12 Mike David
12 John Edward
这是我的密码:
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
Label ID = row.FindControl("lbl_ID") as Label;
TextBox myUID = row.FindControl("txt_UID") as TextBox;
string Full_Name = Request.Form[row.FindControl("txt_UID").UniqueID];
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myConn"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"if not exists(select ID from myTable where ID = @ID)
insert into myTable(ID, Full_Name) values(@ID, @Full_Name)
else update myTable set Full_Name =@Full_Name where ID =@ID";
cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID.Text;
cmd.Parameters.Add("@Full_Name", SqlDbType.VarChar).Value = Full_Name.ToString();
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
您可以像这样使用循环来执行查询
foreach (string name in Full_Name.Split(','))
{
cmd.CommandText = @"if not exists(select ID from myTable where ID = @ID)
insert into myTable(ID, Full_Name) values(@ID, @Full_Name)
else update myTable set Full_Name =@Full_Name where ID =@ID";
cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID.Text;
cmd.Parameters.Add("@Full_Name", SqlDbType.VarChar).Value = name
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
下面是我在上面评论中建议的一个非常粗略/快速的概念。我没有机会测试它
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
Label ID = row.FindControl("lbl_ID") as Label;
TextBox myUID = row.FindControl("txt_UID") as TextBox;
string Full_Name = Request.Form[row.FindControl("txt_UID").UniqueID];
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myConn"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"if not exists(select ID from myTable where ID = @ID)
insert into myTable(ID, Full_Name) values(@ID, @Full_Name)
else update myTable set Full_Name =@Full_Name where ID =@ID";
cmd.Connection = con;
con.Open();
foreach(string currentName in Full_Name.Split(','))
{
if (currentName!="")
{
cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID.Text;
cmd.Parameters.Add("@Full_Name", SqlDbType.VarChar).Value = currentName;
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}
con.Close();
}
}
这强烈假设ID不是主键。只要ID不是唯一的且不是键,这种方法就应该有效。什么是ID?如果它是表的主键,则不可能。不,它是不同的ID。您需要通过调用String.Split来捕获逗号分隔的元素。根据全名进行拆分,并且给定代码的设置方式,您需要为每个结果值循环插入代码。谢谢David,但是我无法让它工作,让我尝试修改上面的代码并将其作为一个可能的解决方案发布。如果文本中只有一个名称,如:John Edward,这是否适用于此代码?我收到了一个错误:“字符串”不包含CurrentName的定义。我还意识到,您可以直接分配参数值,而不是在每次迭代时清除/添加参数值,但我不会冒险在这一点上混淆问题。我收到了此错误:“ConnectionString属性尚未初始化”,因此它似乎插入了第一个名称,但未能插入其余名称。好的,@moe,请稍等,我将修复它。
string str = "John Carter, Mike David, John Edward,";
string[] names = str.Split(',');
foreach (string name in names)
{
if (name.Equals(""))
continue;
///dbstuff
///insert into myTable(ID, Full_Name) values(@ID, @name)
///etc, etc
}