2013-04-01 37 views
2

如何解決此問題?我是否缺少我的代碼或功能代碼?嘗試調用存儲函數「dbname」。「函數名」不指定返回參數

這裏是我的C#代碼

public int AddDetails(string business, string clerkid, string serverid, string ticket, string tablenumber, 
     string sourcecard, string recipientcard, DateTime datesaved, string status) 
    { 
     CreateConnection(); 
     int dbId = 0; 
     using(cmd = new MySqlCommand()) 
     { 
      cmd.Connection = cn; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "AddDetails"; 
      cmd.Parameters.AddWithValue("m_business", business); 
      cmd.Parameters.AddWithValue("m_clerkid", clerkid); 
      cmd.Parameters.AddWithValue("m_serverid", serverid); 
      cmd.Parameters.AddWithValue("m_ticket", ticket); 
      cmd.Parameters.AddWithValue("m_tablenumber", tablenumber); 
      cmd.Parameters.AddWithValue("m_sourcecard", sourcecard); 
      cmd.Parameters.AddWithValue("m_recipientcard", recipientcard); 
      cmd.Parameters.AddWithValue("m_datesaved", datesaved); 
      cmd.Parameters.AddWithValue("m_status", status); 
      cn.Open(); 
      //dbId = Convert.ToInt32(cmd.LastInsertedId); 
      dbId = int.Parse(cmd.ExecuteScalar().ToString()); 
      //dbId = Convert.ToInt32(cmd.ExecuteNonQuery()); 
      cn.Close(); 
     } 
     return dbId; 
    } 

,這裏是我的存儲功能

CREATE DEFINER=`root`@`192.168.21.%` FUNCTION `AddDetails`(
m_business VARCHAR(1), 
m_clerkid VARCHAR(45), 
m_serverid VARCHAR(45), 
m_ticket VARCHAR(45), 
m_tablenumber VARCHAR(45), 
m_sourcecard VARCHAR(45), 
m_recipientcard VARCHAR(45), 
m_datesaved DATETIME, 
m_status VARCHAR(45) 
) RETURNS int(11) 
    READS SQL DATA 
BEGIN 
    INSERT INTO `tbl_merchantwarehouse_transaction` 
(
`business`, 
`clerkid`, 
`serverid`, 
`ticket`, 
`tablenumber`, 
`sourcecardnumber`, 
`recipientcardnumber`, 
`datesaved`, 
`status` 
) 
VALUES(
m_business, 
m_clerkid, 
m_serverid, 
m_ticket, 
m_tablenumber, 
m_sourcecard, 
m_recipientcard, 
m_datesaved, 
m_status 
); 

RETURN LAST_INSERT_ID(); 
END 

任何建議,意見/改善我的代碼將非常感激。謝謝:d

回答

6

你應該和你的命令一樣指定返回參數:

cmd.Parameters.Add("@ireturnvalue", MySqlDbType.Int32); 
cmd.Parameters["@ireturnvalue"].Direction = ParameterDirection.ReturnValue; 
+3

@ cheol.lui,後'cmd.ExecuteScalar',嘗試'INT DBID = Convert.ToInt32(cmd.Parameters [ 「@ireturnvalue」]值);' – Habib