asp.net - 无法在asp.net中执行没有参数的mysql存储过程

标签 asp.net mysql stored-procedures

我有这个没有参数的存储过程

    DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `usp_count_rows`(OUT total int)  
BEGIN
    SELECT COUNT(*)   
    FROM address_book.persons;  
END

我想在asp.net页面中使用它。我在后面写了这段代码:

        string commandText = "usp_count_rows";
    MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["mySqlString"].ConnectionString);
    MySqlCommand cmd = null;

    try
    {

        cmd = new MySqlCommand(commandText, conn);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("total", MySqlDbType.Int32);
        cmd.Parameters["total"].Direction = ParameterDirection.Output;

        conn.Open();
        cmd.ExecuteNonQuery();
        int total = (int)cmd.Parameters["?total"].Value;

    }
    catch (MySqlException ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        conn.Clone();
    }

我收到此错误消息

Specified cast is not valid.

走线

int total = (int)cmd.Parameters["?total"].Value;

我应该怎么做才能使代码正常工作。另一件事我想在 aspx 页面中使用结果。像这样的:总行数:(存储过程的结果)。您有什么建议吗?

最佳答案

发生这种情况是因为您的 SP 不返回任何参数,仅返回查询结果。对于这样的存储过程,您不需要任何参数 - 甚至是输出参数,因此重新定义您的 SP 简单如下

CREATE DEFINER=`root`@`localhost` PROCEDURE `usp_count_rows`
BEGIN
    SELECT COUNT(*)   
    FROM address_book.persons;  
END

然后在 C# 中删除行(完全删除它们):

cmd.Parameters.Add("total", MySqlDbType.Int32);
cmd.Parameters["total"].Direction = ParameterDirection.Output;

并替换这些行:

cmd.ExecuteNonQuery();
int total = (int)cmd.Parameters["?total"].Value;

用这一行:

int total = Convert.ToInt32(cmd.ExecuteScalar());

ExecuteScalar方法执行您的 SP/查询并返回该查询的第一行的第一列(在您的情况下,它将是具有 Count(*) 的唯一列和唯一行)。

哦,顺便说一句,在你的 Final block 中,它应该是 conn.Close() 而不是 conn.Clone(),但我认为这是一个简单的类型。

至于在 ASPX 页面上显示结果 - 有多种方法,具体取决于您想要显示它的位置和方式。例如,您可以向页面添加一个 Label 控件并执行如下操作:

Label1.Text = "Total number of rows: " + total.ToString();

关于asp.net - 无法在asp.net中执行没有参数的mysql存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18303259/

相关文章:

asp.net - VS2012 - 服务器/数据库资源管理器中未显示 "Create table"或 "show table data"菜单选项

php - 这是执行 mysql 查询的正确方法吗

sql - 在 SQL 中查找重复项并更新它们?

sql - DB2 存储过程 IF 语句

c# - 通过 IEnumerable 进行分页

asp.net - IIS 和控制台应用程序上的可用虚拟内存

mysql数据库中的php双数据库条目

php - 要在 mysql 更新查询中附加逗号分隔值不重复

c# - 如何使用 dapper 执行 postgres 函数

javascript - 更改日期选择器的日期格式