[英]Stored procedure doesn't return an int value
MySql過程代碼:
CREATE DEFINER=`root`@`localhost` PROCEDURE `USP_CreateCliente`(IN nome_cliente VARCHAR(45))
BEGIN
Select 20;
INSERT INTO clienti ( nome_cliente )
VALUES ( nome_cliente );
Select id_cliente from clienti;
END
控制器頁面中的C#代碼:
ClienteInfo CI = new ClienteInfo();
DboUser objdbo = new DboUser();
int id_cliente = 0;
CI.nome_cliente = txtNomeCliente.Text;
id_cliente = objdbo.CreateClienteInfo(CI);
DboUser類別:
public int CreateClienteInfo(ClienteInfo CI)
{
int result;
MySqlConnection conn = new MySqlConnection();
DbConnection db = new DbConnection();
conn = db.ConnessioneDb();
MySqlCommand cmd = new MySqlCommand(Costanti.StoredProcedures.USP_CreateCliente, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@nome_cliente", CI.nome_cliente);
result = cmd.ExecuteNonQuery();
conn.Close();
return result;
}
我希望我的C#代碼在將其ID插入數據庫后檢索其客戶ID,因此我可以將其保存到會話中,稍后再在將打印包含客戶信息的文檔的頁面中再次檢索它。
我的id_cliente返回0,您是否注意到任何語法錯誤? 我做錯什么了嗎?
我有90%的決心要解決存儲過程中的問題,導致客戶正確插入
更改此行
result = cmd.ExecuteNonQuery();
至
result = Convert.ToInt32(cmd.ExecuteScalar());
但您還應該更改存儲過程,因為它不會返回AUTO_INCREMENT
列id_cliente
為您生成的最后一個id
CREATE DEFINER=`root`@`localhost` PROCEDURE `USP_CreateCliente`(IN nome_cliente VARCHAR(45))
BEGIN
INSERT INTO clienti ( nome_cliente ) VALUES ( nome_cliente );
Select LAST_INSERT_ID();
END
在MySql中,要獲取生成的auto_increment值,可以使用LAST_INSERT_ID() ,接下來,您的C#代碼不需要使用ExecuteNonQuery,該函數僅返回您已更改,添加或刪除的行數,但是您可以使用ExecuteScalar它返回由您的存儲過程執行的最后一個SELECT命令的第一行的第一列。 (這是SELECT LAST_INSERT_ID())
同樣,要完成答案,您實際上不需要這種簡單工作的存儲過程。 優點應該是最小的,而與要維護的另一軟件相關的問題是顯而易見的。
您的C#代碼可能是(刪除了DbConnection類的用法,因為尚不清楚它的作用)
public int CreateClienteInfo(ClienteInfo CI)
{
int result;
string cmdText = @"INSERT INTO clienti ( nome_cliente ) VALUES ( nome_cliente );
Select LAST_INSERT_ID();";
using(MySqlConnection conn = new MySqlConnection(....connectionstring .....))
using(MySqlCommand cmd = new MySqlCommand(cmdText, conn);
{
conn.Open()
cmd.Parameters.AddWithValue("@nome_cliente", CI.nome_cliente);
result = Convert.ToInt32(cmd.ExecuteScalar())
return result;
}
}
在這里,您可以將批處理命令傳遞到MySql引擎,這意味着兩個具有相同MySqlCommand的命令文本以分號分隔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.