Would you like a list?
Do not concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Use Parametrized queries instead. It also frequently causes problems like this.
What is the content of your textboxes? Since you are handing it to SQL as part of a string, it is very relevant when tryingf to diagnose a problem.
q1 = "UPDATE clients SET name=@NAME,add=@ADD,contact=@CONT,email=@EMAIL,bal=@BAL WHERE ID=@ID"
Then hand the parameters to your SqlCommand object:
cmd.Parameters.AddWithVAlue("@NAME", txtname.Text)
cmd.Parameters.AddWithVAlue("@ADD", txtadd.Text)
cmd.Parameters.AddWithVAlue("@CONT", txtco.Text)
cmd.Parameters.AddWithVAlue("@EMAIL", txtemail.Text)
cmd.Parameters.AddWithVAlue("@BAL", txtbal.Text)
cmd.Parameters.AddWithVAlue("@ID", cid)