【问题标题】:How to fill a dataset from a stored procedure using MySql and Mono如何使用 MySql 和 Mono 从存储过程中填充数据集
【发布时间】:2011-03-11 14:01:28
【问题描述】:

我正在尝试使用 MySql 和 Mono 使用存储过程的结果填充数据集。

存储过程接受一些值,在表中创建一个新行,然后选择一些行。

当我尝试这个时,我得到一个空数据集,我的数据库没有任何新记录。 我已经检查了基础知识:

  • 数据库正在运行,我可以连接。
  • 存储过程名称和参数名称正确。
  • 参数类型正确。
  • 存储过程在 sql 命令行中正常工作。

如果我不使用存储过程并将 command.commandtext 设置为某个 sql,它会返回一个包含数据的数据集。

这是一个代码 sn-p,它显示了我正在尝试做的事情。

ConnectionStringSettings connectionStringSettings = ConfigurationManager.ConnectionStrings [this.provider];
DbProviderFactory factory = DbProviderFactories.GetFactory (connectionStringSettings.ProviderName);

using(DbConnection connection = factory.CreateConnection())
{
    connection.ConnectionString = connectionStringSettings.ConnectionString;
    connection.Open();

    using(DbCommand command = connection.CreateCommand()) {
        command.CommandText = "createUser";
        command.CommandType = CommandType.StoredProcedure;

        dbParameter dbParameter = factory.CreateParameter();
        dbParameter.ParameterName = "@name";
        dbParameter.Value = "Fred.Smith";
        command.Parameters.Add(dbParameter);

        DataSet dataset = new DataSet();
        DbDataAdapter adaptor = factory.CreateDataAdapter();
        adaptor.SelectCommand = command;
        adaptor.Fill(dataset);

        //This is all ways empty
        return dataset;
    }
}

【问题讨论】:

  • 您的代码是否使用 MS.NET?可以用 MySqlParameter 试试吗?

标签: mysql stored-procedures mono dataset


【解决方案1】:

为什么不从 SQL 语句中调用存储过程:

伪代码:我不是 Mono 人。

query.SQLText = " CALL CreateUser('Fred Smith'); ";
query.Open;

如果存储过程返回一个结果集,它应该与SELECT 一样工作。

请注意,并非所有框架都支持返回结果集的存储过程。 MySQL支持SELECT CALL Createuser('Fred Smith');

或者,您可以更改存储过程,以便将结果集放入临时表中。
然后在单独的选择中从该表中选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-05
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多