MySQL / ASP.NET хранимые процедуры - PullRequest
0 голосов
/ 08 декабря 2010

Надеюсь, это не вопрос ServerFault ...

Я работаю над переносом проекта из хранилища данных в XML-сериализации в базу данных MySQL.Я использую пример, предоставленный мне из предыдущего вопроса , на который вчера ответили.

Соединение с использованием phpMyAdmin и MySQL Workbench Я создал хранимую процедуру под названием 'sprocOrderSelectSingleItem'.Похоже, что хорошо работает с MySQL для всех, что я могу сказать.Когда я запускаю SHOW CREATE PROCEDURE sprocOrderSelectSingleItem , он возвращает следующее:

CREATE DEFINER=<code>username @ % PROCEDURE sprocOrderSelectSingleItem (В порядке ID INTEGER) НАЧАЛО ВЫБРАТЬ * ИЗ tblOrders WHERE ID = orderID;END

Мой совместный код ASP.NET выглядит примерно так:

public static Order GetItem(int ID)
{
    Order objOrder = null;

    using (OdbcConnection objConnection = new OdbcConnection(Utils.ApplicationConfiguration.ConnectionString))
    {
        OdbcCommand objCommand = new OdbcCommand("sprocOrderSelectSingleItem", objConnection);
        objCommand.CommandType = CommandType.StoredProcedure;
        objCommand.Parameters.AddWithValue("orderID", ID);
        objConnection.Open();

        using (OdbcDataReader objReader = objCommand.ExecuteReader())
        {
            if (objReader.Read())
            {
                objOrder = FillDataRecord(objReader);
            }

            objReader.Close();
        }

        objConnection.Close();
    }

    return objOrder;
}

При просмотре страницы появляется следующее сообщение об ошибке:

ОШИБКА [42000] [MySQL] [Драйвер ODBC 5.1] [mysqld-5.0.77] У вас есть ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'sprocOrderSelectSingleItem' в строке 1

Действительно не понимая, что может отсутствовать или работать неправильно.Есть ли какие-либо дополнительные тесты, которые я должен / мог бы выполнить, чтобы подтвердить, что все работает на стороне MySQL?Я пропускаю шаг для правильной передачи вызова хранимой процедуры в ASP.NET?Код разбивается на строку:

using (OdbcDataReader objReader = objCommand.ExecuteReader())

Замена строки

OdbcCommand objCommand = new OdbcCommand("sprocOrderSelectSingleItem", objConnection);

на эту вместо

OdbcCommand objCommand = new OdbcCommand("SELECT * FROM tblOrders WHERE ID=" + ID + ";", objConnection);

и все работает как положено.

Спасибо за любую помощь, которую вы, ребята, можете оказать.

Ответы [ 3 ]

1 голос
/ 08 декабря 2010

Можете ли вы попробовать что-то вроде ниже:

OdbcCommand cmd = new OdbcCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "{call LoadCustCliOrders(?,?,?,?)}";

    cmd.Parameters.Add("CUST_ID",OdbcType.Int);
    cmd.Parameters.Add("CLIENT_ID",OdbcType.Int);
    cmd.Parameters.Add("DATE_FROM",OdbcType.Date);
    cmd.Parameters.Add("DATE_TO",OdbcType.Date);

...

    cmd.Parameters["CUST_ID"].Value = _CustId;
    cmd.Parameters["CLIENT_ID"].Value =  _ClientId;
    cmd.Parameters["DATE_FROM"].Value = _DateFrom;
    cmd.Parameters["DATE_TO"].Value = _DateTo;

    cmd.ExecuteReader 
1 голос
/ 08 декабря 2010

Вы можете запустить выполнение в sprocOrderSelectSingleItem в Mysql напрямую с параметром ID Это покажет, что ваш StoredProc работает правильно.

Вот пример кода на C #, который вызывает сохраненный процесс.

OdbcCommand salesCMD = new OdbcCommand("{ CALL SalesByCategory(?) }", nwindConn);
salesCMD.CommandType = CommandType.StoredProcedure;

OdbcParameter myParm = salesCMD.Parameters.Add("@CategoryName", OdbcType.VarChar, 15);
myParm.Value = "Beverages";

OdbcDataReader myReader = salesCMD.ExecuteReader();

Посмотрите "Call" в OdbcCommand и "?" для параметра, которому позже присваивается значение.

0 голосов
/ 08 декабря 2010

Вы уверены, что используете одно и то же имя пользователя или пользователя с одинаковыми правами доступа.Я думаю, вам нужно добавить слово "CALL" перед сохраненным процессом.Это должен быть CALL sprocOrderSelectSingleItem и попытаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...