Prawdopodobnie potrzebujesz cudzysłowów wokół tych pól ciągów, ale powinieneś używać zapytań parametrycznych!
cmd.CommandText = "INSERT INTO Data ([Name],PhoneNo,Address) VALUES (@name, @phone, @address)";
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@name", txtName.Text);
cmd.Parameters.AddWithValue("@phone", txtPhone.Text);
cmd.Parameters.AddWithValue("@address", txtAddress.Text);
cmd.Connection = connection;
Nawiasem mówiąc, Twoje pierwotne zapytanie mogło zostać poprawione w ten sposób (zwróć uwagę na pojedyncze cudzysłowy):
"VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";
ale to naraziłoby go na ataki SQL Injection ponieważ użytkownik może wpisać
'; drop table users; --
do jednego z twoich pól tekstowych. Albo, bardziej przyziemnie, biedny Daniel O'Reilly za każdym razem przerywałby twoje zapytanie.