1

通常の状態で機能する SQL Insert Into コマンドがあります。つまり、すべてのテキストボックスに入力すると、データがデータベース (Acces db) に送信されます。

しかし、1 つのテキストボックスを「忘れる」と、「INSERT INTO ステートメントの構文エラー」が表示されます。どうすればこれを回避できますか?

string commandPerson = "Insert into Person (LastName,FirstName,DateOfBirth,Phone,Email,AdditionalInfo, Hobbies, CVinDropBOX, Informationrequest) values('" + txtLastN.Text + "','" + txtFirstN.Text + "'," + txtDOB.Text + ",'" + txtPhone.Text + "','" + txtEmail.Text + "','" + txtAdditionalInfo.Text + "','" + txtHobbies.Text + "'," + chkCVDROPBOX.Checked + "," + chkInformation.Checked + ")";

すべてのテキストボックスに値がある場合、問題はありません。1つまたは2つのテキストボックスを空のままにしておくと、エラーメッセージが表示されます:INSERT INTOステートメントの構文エラー

4

2 に答える 2

3

SQL インジェクションに対して安全であるだけでなく、提供されていない場合はパラメーター値を NULL (または string.empty) に設定するため、問題を解決できるパラメーター化されたアプローチを使用します。

ここに例があります:

string ConnString = Utils.GetConnString();
string SqlString = "Insert Into Contacts (FirstName, LastName) Values (?,?)";
using (OleDbConnection conn = new OleDbConnection(ConnString))
{
  using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
  {
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);
    cmd.Parameters.AddWithValue("LastName", txtLastName.Text);
    conn.Open();
    cmd.ExecuteNonQuery();
  }
}

記事全文はこちら: http://www.mikesdotnetting.com/Article/26/Parameter-Queries-in-ASP.NET-with-MS-Access

于 2011-09-22T11:40:17.807 に答える
1

dobに対してこれを試してください(一重引用符がありません):

 '" + txtDOB.Text + "'. 
于 2012-09-28T04:43:36.807 に答える