ODBC postgres错误与非null约束

时间:2016-11-30 10:29:31

标签: c# postgresql odbc

我有一个简单的用户表

CREATE TABLE benutzer
(
  user_id character(38) NOT NULL,
  user_name character varying(50) NOT NULL,
  user_fullname character varying(50),
  user_password character varying(50),
  user_email character varying(50),
  user_locked boolean,
  CONSTRAINT pk_benutzer PRIMARY KEY (user_id)
)
WITH (
  OIDS=FALSE
);

我的C#程序中有一个Odbc连接。 但是我在ExecuteNonQuery()

上得到了空值错误
try
{
    if(con.State != System.Data.ConnectionState.Open)
        con.Open();

    System.Console.WriteLine("State: " + con.State.ToString());

    OdbcCommand cmd = new OdbcCommand("INSERT INTO benutzer (user_id, user_name, user_fullname, user_password, user_email, user_locked) VALUES (?,?,?,?,?,?)", con);
    cmd.Parameters.Add(username, OdbcType.Char, 38);
    cmd.Parameters.Add(username, OdbcType.VarChar, 50);
    cmd.Parameters.Add(name, OdbcType.VarChar, 50);
    cmd.Parameters.Add(username, OdbcType.VarChar, 50);
    cmd.Parameters.Add(mail, OdbcType.VarChar, 50);
    cmd.Parameters.Add("1", OdbcType.Char, 1);

    cmd.ExecuteNonQuery();

    con.Close();
}
catch (OdbcException e)
{
    System.Console.Write(e.ToString());
}

username, name, mail填充了数据。

有人知道解决方案吗?

1 个答案:

答案 0 :(得分:2)

方法Add中的第一个参数应该是参数名称,而不是其值。实际上,你创造了6个参数而没有赋予它们任何价值 您没有收到任何错误,因为ODBC并不关心如何命名参数。

您可以根据输入修改代码,为每个参数添加值

OdbcCommand cmd = new OdbcCommand(@"INSERT INTO benutzer 
 (user_id, user_name, user_fullname, user_password, user_email, user_locked) 
 VALUES (?,?,?,?,?,?)", con);
cmd.Parameters.Add("p1",OdbcType.Char, 38).Value = user_id;
cmd.Parameters.Add("p2", OdbcType.VarChar, 50).Value = user_name;
cmd.Parameters.Add("p3", OdbcType.VarChar, 50).Value = user_full_name;
cmd.Parameters.Add("p4", OdbcType.VarChar, 50).Value = user_password;
cmd.Parameters.Add("p5", OdbcType.VarChar, 50).Value = mail;
cmd.Parameters.Add("p6", OdbcType.Char, 1) = "1";

(值应该是您从用户输入中收集的变量)