Конвертировать функцию DAL в хранимые процедуры в MySQL

0

Привет У меня есть класс для моего уровня доступа к данным, который содержит функцию с именем GetCitiesByLocation, и это выглядит как

public DataTable GetCitiesByLocation(long pStateID, string pKeyword)
{

    //create database object
    Database db = DBHelper.CreateDatabase();

    //create SELECT sql statement to be executed using string builder
    //add WHERE 1 = 1 at the end

    //add where [optional] statements
    if (String.IsNullOrEmpty(pKeyword) == false)
    {
        //Create AND statement for ?Keyword
    }

    //add group by order by queries
    sql.Append(" GROUP BY c.city_id ");
    sql.Append(" ORDER BY city_name ");

    //Convert SQL String To DbCommand Object
    DbCommand comm = db.GetSqlStringCommand(sql.ToString());

    //Map Variables to mysql ?Parameters
    db.AddInParameter(comm, "?StateID", DbType.Int64, pStateID);
    db.AddInParameter(comm, "?Keyword", DbType.String, pKeyword);

    try
    {
        //execute sql statement and return results
    }

    catch (Exception ex)
    {
        throw ex;
    }
}

Смотрите полную версию здесь: http://friendpaste.com/6ZGJHRNxQ9J57ntFD5XZi1

Я хотел бы преобразовать это в хранимую процедуру MYSQL

Вот неудачная попытка моего друга преобразовать его в MSSQL Stored Proc

ALTER PROCEDURE [dbo].[sp_Search]
@Keyword varchar(30)

AS

SELECT count(cc.course_id) as 'course_count',  c.*, con.* FROM city c
LEFT JOIN countries con on con.country_id = c.country_id
LEFT JOIN courses cc on cc.city_id = c.city_id
WHERE 1 = 1
AND CASE @Keyword WHEN (@Keyword <> NULL) THEN (AND c.state_name like @Keyword)  END
AND CASE @Keyword WHEN (pStateID > 0) THEN (AND c.state_id = @StateID AND c.country_id = 69 AND c.province_id = 0) END
AND CASE @Keyword WHEN (pProvinceID  > 0) THEN (AND c.province_id = @ProvinceID AND c.country_id = 52 AND c.state_id = 0) END

У меня также есть транзакционный DAL, который я хочу преобразовать в mysql, сохраненный proc

Теги:
stored-procedures
data-access-layer

1 ответ

0
Лучший ответ

Я не эксперт по MySQL, но, похоже, вы пытаетесь выполнить хранимую процедуру так же, как и выполнить Parameterized Query, и это не сработает.

Я также был бы очень удивлен, если бы ваш MSSQL Proc был скомпилирован так, как я ожидал бы, что ваш proc начнется с

  ALTER PROCEDURE [dbo].[sp_Search]
    @Keyword varchar(30),
    @StateID int = null,
    @ProvinceID int = null

Или в MySQL

CREATE PROCEDURE sp_Search(Keyword varhar(30),
StateID int,
ProviceId int)

Вам больше всего хотелось бы изменить свой DAL следующими способами.

  • Существующие вызовы DAL GetSqlStringCommand. Тебе нужно измените это на GetSqlStringCommand на GetStoredProcCommand.
  • ваши имена параметров должны были бы изменить
  • текст woud будет sp_search вместо "Выберите count (cc.course_id) как" course_count... "
  • 0
    Привет, я знаю, как получить доступ к хранимой процедуре, и параметры в примере хранимой процедуры были преднамеренно обрезаны, чтобы представить пример вывода, который я хочу. Я хочу преобразовать свой существующий код в DAL, содержащий серию операторов if, в хранимую процедуру.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню