简体   繁体   中英

How to split comma separated values

I have text-box inside a gridview and i am performing and insert statement looping through every row in my gridview. My issue now is that i can have multiple names in the text-box like this:

John Carter, Mike David, John Edward,

so how can i split and insert each individual name into my table with the same ID? For instance, if the current row has ID =12 then my table will look like this:

ID      Full_Name
12     John Carter
12     Mike David
12     John Edward

here is my code:

 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();

            }
}
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
}

This strongly assumes that ID is not a primary key. As long as ID is not unique and not a key, this sort of methodology should work.

You can execute the query with the use of loop like this

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();
}

Here's a very rough/quick notion of what I'm suggesting in the comment above. have not had a chance to test it.

 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();

            }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM