如何使用MySql和Mono从存储过程填充数据集

时间:2010-07-04 07:32:26

标签: mysql stored-procedures mono dataset

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

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

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

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

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

这是一段代码片段,展示了我要做的事情。

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;
    }
}

1 个答案:

答案 0 :(得分:0)

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

伪代码:我不是单声道人。

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

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

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

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