2010-09-17 11 views
2

J'appelle une procédure stockée sur le serveur sql comme ceci:appel à la procédure stockée ne retourne rien

SqlConnection conn = new SqlConnection(); 
SqlCommand cmd; 
XmlDocument xmlDocument; 
XmlReader xr; 
XmlNode node; 
SqlDataReader rdr = null; 

try 
{ 
    xmlDocument = new XmlDocument(); 
    conn.ConnectionString = "Data Source=test;Initial Catalog=teste;Integrated Security=SSPI;"; 
    cmd = new SqlCommand(); 
    cmd.Connection = conn; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = "[dbo].[spSearchKeywords]"; 

    cmd.Parameters.Add(new SqlParameter("@VALUE", "XPT")); 

    conn.Open(); 

    xr = cmd.ExecuteXmlReader(); 

    conn.Close(); 
    node = xmlDocument.ReadNode(xr); 
} 

la connexion et l'exécution de la commande, mais il ne retourne rien il y a des données pour revenir et les paramètres sont corrects (quand je l'appelle la procédure sql avec le même paramètre, il me renvoie un résultat)

ici est le proc:

ALTER PROCEDURE [dbo].[spSearchKeywords] 
(
    @VALUE     NVARCHAR(50) = NULL, 
    @ACCOUNTGROUPID   NVARCHAR(50) = NULL, 
    @ShortCodeId   NVARCHAR(50) = NULL, 
    @VALUETYPE    NVARCHAR(50) = NULL, 
    @ASSEMBLY    NVARCHAR(100) = NULL, 
    @ASSEMBLYCONTAINSURI NCHAR (10) = NULL, 
    @ASSEMBLYTYPE   NVARCHAR(50) = NULL 
) 
AS 
BEGIN 

    SET NOCOUNT ON; 

    SELECT [Value] 
      ,[AccountGroupId] 
      ,[ShortCodeId] 
      ,[ValueType] 
      ,[assembly] 
      ,[assemblyContainsUri] 
      ,[assemblyType] 
     FROM [teste].[dbo].[keywords] 
    WHERE [Value]     = ISNULL(@VALUE,    [Value]) 
     AND [AccountGroupId]   = ISNULL(@ACCOUNTGROUPID,  [AccountGroupId]) 
     AND [ShortCodeId]   = ISNULL(@SHORTCODEID,   [ShortCodeId]) 
     AND [ValueType]    = ISNULL(@VALUETYPE,   [ValueType]) 
     AND [assembly]    = ISNULL(@ASSEMBLY,   [assembly]) 
     AND [assemblyContainsUri] = ISNULL(@ASSEMBLYCONTAINSURI, [assemblyContainsUri]) 
     AND [assemblyType]   = ISNULL(@ASSEMBLYTYPE,  [assemblyType]) 
    FOR XML AUTO 
END 
+3

Pourquoi utilisez-vous XML? – SLaks

+0

Je suis d'accord avec SLaks. XML et SQL Server sont deux choses qui n'auraient jamais dû être «intégrées». – NotMe

Répondre

8

Vous ne pouvez pas fermer votre connexion avant d'utiliser réellement XmlReader. Essayez de laisser tomber le conn.Close() en dessous de . Et considérez l'instruction using pour vos objets de base de données jetables.

+1

Je pensais aussi dans ce sens. Surpris, il n'y a pas d'exception dans ce cas. –

+1

lol, je savais que c'était quelque chose de vraiment idiot, merci l'homme! – yuneyev

+0

@Kirk Woll: Quelle exception feriez-vous? – NotMe

Questions connexes