2010-08-27 6 views
0

Salut je classe pour ma couche d'accès aux données qui contient une fonction appelée GetCitiesByLocation et il semble que ceConvertir fonction DAL dans des procédures stockées dans une base MySQL

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

Voir la version complète ici: http://friendpaste.com/6ZGJHRNxQ9J57ntFD5XZi1

Je voudrais comme à convertir en MYSQL procédure stockée

Voici une tentative avortée de mon ami pour le convertir en MSSQL stocké 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 

J'ai aussi DAL transactionnel que je veux convertir MySQL stockées proc

Répondre

0

Je ne suis pas un expert sur MySQL, mais il semblerait que vous essayez d'exécuter une procédure stockée de la même façon que vous exécuterez une requête paramétrée et cela ne fonctionne pas.

Je serais également très surpris si votre MSSQL Proc compilé comme j'attendre à ce que votre proc commencerait par

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

Ou dans MySQL

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

Vous aimeriez le plus avoir à changer votre DAL des manières suivantes

  1. Vos appels DAL existants GetSqlStringComman ré. Vous devez modifier cela à GetSqlStringCommand en GetStoredProcCommand.
  2. vos noms de paramètres devraient changement
  3. le texte woud être sp_search au lieu de "Select count (de cc.course_id) comme « course_count ..."
+0

Salut, je sais comment accéder à un stocké procédure et les paramètres sur l'exemple de procédure stockée a été volontairement coupé juste pour représenter un échantillon de sortie que je veux. Je veux convertir mon code existant derrière DAL qui a une série d'instructions if dans une procédure stockée. –