標籤:val exists 語句 sql lex 參數 tostring direction input
1.首先建立一個帶參數的預存程序
①預存程序名稱=proc_bookinfo
②預存程序2個參數 一個in 一個out in參數名稱=ispay out參數名稱=unPaycount
③這個預存程序 根據傳入的未支付欄位名稱 輸出未支付的商品數量
DELIMITER $$ USE `bookshop`$$ DROP PROCEDURE IF EXISTS `proc_bookinfo`$$ CREATE DEFINER=``@`` PROCEDURE `proc_bookinfo`(IN ispay VARCHAR(10),OUT unPaycount INT) BEGIN SELECT COUNT(*) INTO unPaycount FROM tb_bookinfo AS a,tb_shopbook AS b WHERE b.ispay=ispay; END$$ DELIMITER ;
2.C#代碼調用該預存程序
①sql語句只需要寫預存程序的名稱即可
②2個參數的名稱和資料類型以及資料長度都要和資料庫中定義預存程序的參數完全相同(大小寫不影響)
③2個參數的Direction屬性賦予對應的類型
④調用ExcuteProc方法執行 即可,輸出值就是傳入的第二個參數
StringBuilder sql=new StringBuilder(); sql.Append("proc_bookinfo"); MySqlParameter[] parameters = { new MySqlParameter("@ispay", MySqlDbType.VarChar,10), new MySqlParameter("@unPaycount", MySqlDbType.Int32,11) }; parameters[0].Value ="未付款"; parameters[0].Direction = ParameterDirection.Input; parameters[1].Value = 0 ; parameters[1].Direction = ParameterDirection.Output; DbHelperMySQL.ExecuteProc(Convert.ToString(sql), parameters);
3.執行資料庫操作的方法
注意:CommandType屬性一定賦值為CommandType.StoredProcedure
public static object ExecuteProc(string SQLString, params MySqlParameter[] cmdParms) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand cmd = new MySqlCommand()) { try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); cmd.CommandType = CommandType.StoredProcedure; int rows = cmd.ExecuteNonQuery(); Console.WriteLine("傳回值為 "+cmdParms[1].Value); cmd.Parameters.Clear(); return rows; } catch (MySql.Data.MySqlClient.MySqlException e) { connection.Close(); throw e; } } } }
c#調用Mysql帶參數的預存程序