2014-02-15 23 views
1

執行下面的代碼會導致錯誤。 「用戶名」欄不能爲空
值正在傳遞給變量。但我認爲OdbcCommand聲明沒有準備好。c#odbcCommand參數化中的錯誤

OdbcCommand cmd = new OdbcCommand 
    { 
    CommandText = 
    "INSERT INTO orders(username,name,email,address,contact_number,html_email) 
    VALUES(@username,@name,@email,@address,@contact_number,@html_email)", 

    Connection = Con 
    }; 

    cmd.Parameters.AddWithValue("@username", username); 
    cmd.Parameters.AddWithValue("@name", name); 
    cmd.Parameters.AddWithValue("@email", email); 
    cmd.Parameters.AddWithValue("@address", add); 
    cmd.Parameters.AddWithValue("@contact_number", contact); 
    cmd.Parameters.AddWithValue("@html_email", table); 

    billid = cmd.ExecuteScalar().ToString(); 
+0

您確定要傳遞的用戶名值不爲空嗎?嘗試調試並看看。 –

+0

@SudhakarTillapudi是的,我已經檢查過了。所有的值都被傳遞。我懷疑這種方法是否適用於mysql。我在MSSqlServer中使用它,但是對於mysql有所懷疑。 – coding

+0

@SudhakarTillapudi我正在使用mysql – coding

回答

1

OdbcCommand不支持命名的參數語法,而不是你應使用問號佔位符:

OdbcCommand cmd = new OdbcCommand 
{ 
CommandText = 
"INSERT INTO orders(username,name,email,address,contact_number,html_email) 
VALUES(?, ?, ?, ?, ?, ?)", 

Connection = Con 
}; 

cmd.Parameters.AddWithValue("@p1", username); 
cmd.Parameters.AddWithValue("@p2", name); 
cmd.Parameters.AddWithValue("@p3", email); 
cmd.Parameters.AddWithValue("@p4", add); 
cmd.Parameters.AddWithValue("@p5", contact); 
cmd.Parameters.AddWithValue("@p6", table); 

int affectedRecords = cmd.ExecuteNonQuery(); 
1

,而不是使用ExecuteNonQueryExecuteScalar()執行插入聲明。

int affectedRows = cmd.ExecuteNonQuery(); 

你可能想返回最後插入的記錄編號,這就是爲什麼你正在使用ExecuteScalarOdbcCommand不支持命名參數,因此您需要在查詢中使用佔位符。所以,總體來說,你需要查詢更改爲此

CommandText = "INSERT INTO orders(username,name,email,address,contact_number,html_email) 
       VALUES(?,?,?,?,?,?) SELECT SCOPE_IDENTITY()"; 

現在你可以使用ExecuteScalar()

billid = cmd.ExecuteScalar().ToString(); 
1

試試這個:

OdbcCommand cmd = new OdbcCommand("INSERT INTO orders(username,name,email,address,contact_number,html_email) 
VALUES(@username,@name,@email,@address,@contact_number,@html_email)",Con); 

cmd.Parameters.AddWithValue("@username", username); 
cmd.Parameters.AddWithValue("@name", name); 
cmd.Parameters.AddWithValue("@email", email); 
cmd.Parameters.AddWithValue("@address", add); 
cmd.Parameters.AddWithValue("@contact_number", contact); 
cmd.Parameters.AddWithValue("@html_email", table); 

billid = cmd.ExecuteNonQuery(); 
+0

Odbc也被設計爲與MySql數據庫一起工作,因此使用MySqlCommand並不是必需的。 Xint0的答案解決了我的問題。 感謝您的幫助,我感謝您付出了努力。 – coding

+0

是的,我意識到了。謝謝。 –