Как заполнить набор данных из хранимой процедуры, используя MySql и Mono - PullRequest
2 голосов
/ 04 июля 2010

Я пытаюсь заполнить набор данных результатом хранимой процедуры, используя 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 голосов
/ 15 апреля 2011

Почему бы не вызвать хранимую процедуру из оператора SQL:

Псевдокод: Я не моно человек.

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

Если хранимая процедура возвращает набор результатов, она должна работать так же, как и SELECT.

Обратите внимание, что не все платформы поддерживают хранимые процедуры, которые возвращают наборы результатов. И MySQL не поддерживает SELECT CALL Createuser('Fred Smith');

В качестве альтернативы вы можете изменить хранимую процедуру, чтобы она помещала набор результатов во временную таблицу.
А затем выберите из этой таблицы в отдельном списке.

...