2016-11-30 55 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