0

我正在尝试通过 C#(不是 asp.net)使用 PostgreSQL Npqsql,我创建了一个名称GenData为 SQL 的表;

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 注入等。我对 Npgsql 不太熟悉,但我几乎可以肯定它遵循与其他 .NET 数据库提供程序相同的准则,因此您应该能够以SQLParameter相同的方式使用该类。

于 2012-11-22T16:03:24.130 回答