2013-07-08 4 views
-4

Quelqu'un pourrait-il m'aider? Je ne travaille pas normalement en C#, alors mes excuses. J'ai la requête suivante qui fonctionne, mais besoin de changer la recherche store.Zip à un LIKE au lieu de =. Lorsque j'essaie simplement de changer le = en LIKE et d'ajouter % après {0} il compile, mais ne fonctionne pas. La base de données est Sql Server 2008:La requête C# LIKE ne fonctionne pas

public List<Store> DoesStoreExist(string customerNumber, string zipCode) { 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("SELECT id, Company, CustomerNumber, Name, Address, City, State, Zip, Phone, Latitude, Longitude, NumOfReferrals, IsNashville, PredsPromotionParticipant "); 
    sb.Append("FROM dbo.Stores store "); 
    sb.AppendFormat("WHERE store.CustomerNumber='{0}' ", customerNumber); 
    sb.AppendFormat("AND store.Zip ='{0}' ", zipCode); 
    sb.AppendFormat("AND store.Locator=1"); 

    IQuery query = NHibernateSession.CreateSQLQuery(sb.ToString()); 
    IList results = query.List(); 
    List<Store> stores = new List<Store>(); 
    foreach (object result in results) { 
     object[] result_arr = result as object[]; 
     if (result_arr != null) stores.Add(Store.From(result_arr)); 
    } 
    return stores; 

} 

Même juste changer le « = » à « LIKE » provoque la requête de ne pas retourner:

public List<Store> DoesStoreExist(string customerNumber, string zipCode) 
{   
     StringBuilder sb = new StringBuilder(); 
     sb.Append("SELECT id, Company, CustomerNumber, Name, Address, City, State, Zip, Phone, Latitude, Longitude, NumOfReferrals, IsNashville, PredsPromotionParticipant "); 
     sb.Append("FROM dbo.Stores store "); 
     sb.AppendFormat("WHERE store.CustomerNumber='{0}' ", customerNumber); 
     sb.AppendFormat("AND store.Zip LIKE '{0}%' ", zipCode); 
     sb.AppendFormat("AND store.Locator=1"); 

    IQuery query = NHibernateSession.CreateSQLQuery(sb.ToString()); 
    IList results = query.List(); 
    List<Store> stores = new List<Store>(); 
    foreach (object result in results) { 
     object[] result_arr = result as object[]; 
     if (result_arr != null) stores.Add(Store.From(result_arr)); 
    } 
    return stores; 
} 

Quand je lance la suivante sur la base de données directement, il œuvres:

SELECT * FROM [StoreDB].[dbo].[Stores]WHERE Zip LIKE '33815%' 

Merci!

+6

Quelle erreur obtenez-vous? – SLaks

+0

Le fait qu'il ne s'exécute pas est un problème SQL, pas C# - la requête semble très bien. Je risquerais de deviner que l'entrée est erronée et que vous n'obtiendrez aucune correspondance de la part de la base de données. – James

+0

Quelle est l'erreur? Quelle est la valeur de 'customerNumber'? –

Répondre

0

essayer

public List<Store> DoesStoreExist(string customerNumber, string zipCode) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("SELECT id, Company, CustomerNumber, Name, Address, City, State, Zip, Phone, Latitude, Longitude, NumOfReferrals, IsNashville, PredsPromotionParticipant "); 
     sb.Append("FROM dbo.Stores store "); 
     sb.AppendFormat("WHERE store.CustomerNumber ='{0}' ", customerNumber); 
     sb.AppendFormat("AND store.Zip like '{0}%' ", zipCode); 
     sb.AppendFormat("AND store.Locator=1"); 
    } 
+0

Merci - J'ai essayé, mais il vient juste de sortir. –

+0

Ce que j'essaie de faire est de gérer zip + 4 - parfois les quatre derniers chiffres ne sont pas dans la base de données. Merci! –

+0

Regardez ma réponse, je suppose que vous obtenez l'exception de délai d'attente de la base de données SQL. Vous n'avez toujours pas mentionné le message d'erreur que vous obtenez. – ataravati

0

Cela devrait fonctionner: sb.AppendFormat ("ET store.Zip comme '{0}%'", zipCode);

+0

Malheureusement, cela n'a pas fonctionné, mais merci. –

0

Si le délai expire, vous devez augmenter le délai d'expiration de la commande. En supposant que votre objet entité est appelé 'db', faites-le avant d'exécuter la requête dans votre code C#.

db.CommandTimeout = 300; 

Le délai d'expiration est en secondes.