2016-11-30 54 views
0

错误我有一个简单的用户表ODBC的Postgres与非空约束

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#PROGRAMM一个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都充满了数据空值误差。

有人知道解决方案吗?

+0

什么错误简单地修改代码增加值各参数*做*您得到? – HimBromBeere

+0

已解决! 错误是一个'空值错误' – Phil795

回答

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"; 

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

+0

谢谢@Steve工作得很好! – Phil795