0

C# oledbのINSERT INTOステートメントの構文エラーの正確な複製?

こんにちは、エラーを見つけることができません。助けてください。構文エラーによる OleDb 例外があります。INSERT INTO ステートメントの構文エラー OleDb Exception は処理されません。

    private OleDbConnection myCon;

    public Form1()
    {
        InitializeComponent();
        myCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C.mdb");
    }

private void insertuser_Click(object sender, EventArgs e)
    {
        try
        {
            OleDbCommand cmd = new OleDbCommand();
            myCon.Open();
            cmd.Connection = myCon;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "INSERT INTO User ([UserID], [Forename], [Surname], [DateOfBirth], [TargetWeight], [TargetCalories], [Height]) Values ('" + userid.Text + "' , '" + fname.Text + "' , '" + sname.Text + "' , '" + dob.Text + "' , '" + tarweight.Text + "' , '" + tarcal.Text + "' , '" + height.Text + "')";


            cmd.ExecuteNonQuery();
            myCon.Close();
        }
        catch (Exception ex) { MessageBox.Show(ex.ToString()); }



    }
4

2 に答える 2

1

挿入しようとしている値は何ですか? 高さはおそらくフィートとインチ (5'10") ですか? その場合、文字列 (') が閉じられ、構文エラーが発生します。

そして、@Brennan Vincentに心から同意します。生の SQL を構築することは、前進する方法ではありません。

于 2011-01-07T16:56:39.213 に答える
0

TargetWeightHeight、およびTargetCaloriesが浮動小数点値または整数値の場合、SQL ステートメントで引用符で囲む必要はありません。

また、質問とは直接関係ありませんが、パラメータ化されたクエリの使用を検討する必要があります。コードは SQL インジェクションに対して非常に脆弱です。

于 2011-01-07T16:56:00.690 に答える