0

を介してC#(asp.netではなく)でPostgreSQLを使用しようとしていますが、SQLを使用Npqsqlして名前のテーブルを作成しました。GenData

CREATE TABLE gendata
(
  empname text NOT NULL,
  pyrll text NOT NULL,
  contracno text,
  expird date,
  dtbrth date,
  plbrth text,
  cid text,
  passport text,
  jndt date,
  postn text,
  dept text,
  hmtwn text,
  familymen numeric,
  contno text,
  CONSTRAINT gendata_pkey PRIMARY KEY (pyrll)
)

次のコードを使用してテーブルに挿入しようとしました。

String sql = String.Format("INSERT INTO GenData VALUES ({0},{1},{2},'{3}',{4},{5},{6},{7},{8},{9},{10},{11},{12},{13});"
                    ,textBox1.Text
                    ,textBox2.Text
                    ,textBox3.Text
                    ,textBox4.Text
                    ,textBox5.Text
                    ,textBox6.Text
                    ,textBox7.Text
                    ,textBox8.Text
                    ,textBox9.Text
                    ,textBox10.Text
                    ,textBox11.Text
                    ,textBox12.Text
                    ,textBox13.Text
                    ,textBox14.Text);

しかし、私は常に次のような例外を受け取ります。 ここに画像の説明を入力してください

4

1 に答える 1

3

SQLパラメータを使用していないので、文字列に値を直接埋め込むため(これは非常に悪い習慣と見なされます)、SQL構文に従う必要があります。特定の状況では、すべての文字列パラメータをにラップする必要があります'

より良い方法は、SQLParameterクラスを使用して.NETが入力データに対して必要なすべての変換を実行できるようにし、データをエスケープしてsql-injectionsなどを回避することです。私はNpgsqlに精通していませんが、他の.NETデータベースプロバイダーと同じガイドラインに従っているとほぼ確信しているので、SQLParameterクラスを同じように使用できるはずです。

于 2012-11-22T16:03:24.130 に答える