これらの文字列フィールドはおそらく引用符で囲む必要がありますが、パラメータ化されたクエリを使用する必要があります!
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;
ちなみに、元のクエリは次のように修正されている可能性があります(一重引用符に注意してください):
"VALUES ('" + txtName.Text + "','" + txtPhone.Text + "','" + txtAddress.Text + "');";
ただし、これによりSQLインジェクション攻撃に対して脆弱になります ユーザーが
と入力できるため'; drop table users; --
テキストボックスの1つに。または、もっと平凡なことに、貧しいダニエル・オライリーは毎回あなたの質問を破るでしょう。