Du behöver förmodligen citattecken runt dessa strängfält, men du bör använda parametriserade frågor!
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;
Förresten, din ursprungliga fråga kunde ha fixats så här (observera de enskilda citattecken):
"VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";
men detta skulle ha gjort det sårbart för SQL Injection-attacker eftersom en användare kan skriva in
'; drop table users; --
i en av dina textrutor. Eller, mer vardagligt, stackars Daniel O'Reilly skulle bryta din fråga varje gång.