0

FOXPRO のテーブル AG_MAS に挿入しました:

private void button1_Click(object sender, EventArgs e)
    {
        OleDbConnection connect = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=pl_prov.dbf");
        try
        {
            connect.Open();
            string strSQL = "insert into ag_mas";
            strSQL += "(ag_code,ag_level,ag_group,ag_rcode,ag_status,";
            strSQL += "ag_type,ag_gender,ag_lname,ag_fname,ag_add1,";
            strSQL += "ag_add2,ag_add3,ag_add4,ag_class,ag_vouch,";
            strSQL += "pl_prov,pl_zone,ag_jdate,ag_ddate,ag_dbrith,ag_bank  ,";
            strSQL += "ag_bankno,ag_telno,ag_faxno,ag_email,ag_ppay,";
            strSQL += "ag_contno,ag_dcont,ag_ladate,ag_lpolno,ag_lendno,";
            strSQL += "ag_comm,ag_maxcom,ag_orcomm,ag_om1com,ag_om2com,";
            strSQL += "ag_om3com,ag_oy1com, ag_oy2com,ag_oy3com,ag_network)";
            strSQL += "values (";
            strSQL += "'" + textBox1.Text + "',";//ag_code
            strSQL += "'" + textBox2.Text + "',";//ag_level
            strSQL += "'" + textBox3.Text + "',";//ag_group
            strSQL += "' ' ,";                                //ag_rcode
            strSQL += "'" + textBox4.Text + "',";//ag_status
            strSQL += "'" + textBox22.Text + "',";//ag_type
            strSQL += "'" + textBox5.Text + "',";//ag_gender
            strSQL += "'" + textBox6.Text + "',";//ag_lname
            strSQL += "'" + textBox7.Text + "',";//ag_fname
            strSQL += "'" + textBox8.Text + "',";//ag_add1
            strSQL += "'" + textBox9.Text + "',";//ag_add2
            strSQL += "'" + comboBox1.Text + "',";//ag_add3
            strSQL += "' ' ,";                                   //ag_add4
            strSQL += "'" + textBox10.Text + "',";//ag_class
            strSQL += "'" + textBox11.Text + "',";//ag_vouch
            strSQL += "'" + comboBox1.SelectedValue + "',";//pl_prov
            strSQL += "' ' ,";                                   //pl_zone
            strSQL += "'" + textBox12.Text + "',";  //ag_jdate
            strSQL += "'1987/10/10',";                             //ag_ddate
            strSQL += "'1987/10/10',";                             //ag_dbirth
            strSQL += "' ' ,";                                   //ag_bank
            strSQL += "' ' ,";                                   //ag_bankno
            strSQL += "' ' ,";                                   //ag_telno
            strSQL += "' ' ,";                                   //ag_faxno
            strSQL += "' ' ,";                                   //ag_email
            strSQL += "'" + textBox13.Text + "',"; //ag_ppay
            strSQL += "'" + textBox15.Text + "',";//ag_contno
            strSQL += "'" + textBox14.Text + "',";//ag_dcont
            strSQL += "'1987/10/10', ";               //ag_ladate
            strSQL += "' ' ,";                                  //ag_lpopno
            strSQL += "' ' ,";                                  //ag_lendno
            strSQL += "0,";                                  //ag_comm
            strSQL += "0,";                                  //ag_maxcom
            strSQL += "0,";                                  //ag_orcomm
            strSQL += "0,";                                  //ag_om1com
            strSQL += "0,";                                  //ag_om2com
            strSQL += "0,";                                  //ag_om3comm
            strSQL += "0,";                                  //ag_oy1com
            strSQL += "0,";                                  //ag_oy2Xcom
            strSQL += "0,";                                  //ag_oy3com
            strSQL += "' ')";                                  //ag_network
            OleDbCommand cmd = new OleDbCommand(strSQL, connect);
            cmd.ExecuteNonQuery();
        }
        catch(Exception err)
        {
            MessageBox.Show(err.Message);
        }
    }
}

しかし、私は挿入できません。エラー「データミスマッチ」のため、助けてください。

4

3 に答える 3

1

日付の問題についてはフランクに同意します...数値フィールドにテキストを入力しようとしている可能性もあります(またはその他のスワッピング)。

ただし、より大きな問題は、Oracle、SQL-Server、MySQL などの真の SQL データベースを使用する場合です。しかし、特に Web ベースのシステムで SQL ステートメントを実行すると、SQL インジェクション攻撃に対して無防備になります。

パラメータ化されたクエリ/挿入/更新/削除を使用することをお勧めします。

于 2010-09-16T12:54:57.107 に答える
0

私は解決策に関してフランクに同意します。DRappには、挿入ステートメントをどのように実行するかについての有効なポイントがあると思います。DRappの提案に追加するために、 LINQtoVFPを使用してすべてのSQLコマンドの書き込みを処理できることを指摘しておきます。

于 2010-09-18T02:37:15.207 に答える
0

不適切なデータ型をフィールドに挿入しようとすると、データ型の不一致エラーが発生します。たとえば、文字列を整数フィールドに格納しようとするとします。

一見すると、日付の形式が問題だと思います。"'1987/10/10'," を "{^1987-10-10}," に変更します。

日付を変更しても問題が解決しない場合は、strSQL 変数の結果と ag_mas テーブルの構造を示していただけると助かります。

于 2010-09-16T10:58:48.103 に答える