2012-07-03 2 views
0

Je suis nouveau dans le monde des procédures stockées.Valeur de sortie de la procédure stockée vers la variable

Nous avons un système existant avec une procédure stockée existante, qui vérifie le nom d'utilisateur et le chemin de l'URL. La procédure stockée vérifiera si les détails de l'utilisateur existent. Si existe, renvoie la valeur groupname à laquelle appartient le nom d'utilisateur. Tout ce que je veux, c'est d'écrire du code asp.net C# pour cette procédure stockée. La transmission des détails et du chemin de l'utilisateur et le renvoi de la procédure stockée renvoient la valeur dans une variable chaîne.

lien ci-dessous pour SQL Server exécutons procédure stockée

http://www.natboxservices.com/helmshore/img/pic.jpg

lien ci-dessous pour la valeur de sortie SQL Server ressemblent

http://www.natboxservices.com/helmshore/img/2012-07-03%2009.35.13.jpg

noter que l'image ci-dessus nomdugroupe est vide parce que j'Exécuté emmagasinés procédure avec une mauvaise entrée et il n'y a pas de nom de groupe existe pour ces données dans sqlserver. si existe il retournera une valeur pour le nom de groupe tel que "administrateur" ou "Manager"

ma question est "si les données existent et le nom du groupe de retour je veux passer cette valeur dans la variable de chaîne" pour que l'attribution du paramètre et variable pass valeur de retour dans la chaîne

Ceci est mon StoredProcedure

USE [IRC_siteadmin] 
GO 
/****** Object: StoredProcedure [dbo].[sp_intranet_GetSecurity] Script Date: 07/03/2012 10:05:35 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE PROCEDURE [dbo].[sp_intranet_GetSecurity] 

@username VARCHAR(50), 
@path VARCHAR(200), 
@errorID INT OUTPUT 

AS 

BEGIN 

SELECT 
    G.name as groupname 
FROM 
    tbl_site_link L WITH(NOLOCK) 
INNER JOIN 
    tbl_site_link_group LG WITH(NOLOCK) 
ON 
    L.link_id = LG.link_id 
INNER JOIN 
    tbl_site_group G WITH(NOLOCK) 
ON 
    LG.group_id = G.group_id 
INNER JOIN 
    (  SELECT 
       group_id 
      FROM 
       tbl_site_user U WITH(NOLOCK) 
      INNER JOIN 
       tbl_site_user_group UG WITH(NOLOCK) 
      ON 
       U.user_id = UG.user_id 
      WHERE 
       [name] = @Username) U 
ON 
    G.group_id = U.group_id 
WHERE 
    L.url LIKE '%'[email protected]+'%' 
    AND 
    (U.group_id IS NOT NULL) 

UNION 

SELECT 
    'Uber' as groupname 
FROM 
    tbl_site_link L WITH(NOLOCK) 
INNER JOIN 
    tbl_site_link_group LG WITH(NOLOCK) 
ON 
    L.link_id = LG.link_id 
CROSS JOIN 
    (  SELECT 
       group_id 
      FROM 
       tbl_site_user U WITH(NOLOCK) 
      INNER JOIN 
       tbl_site_user_group UG WITH(NOLOCK) 
      ON 
       U.user_id = UG.user_id 
      WHERE 
       [name] = @Username 
      AND 
       group_id = 1) U 
WHERE 
    L.url LIKE '%'[email protected]+'%' 
    AND 
    (U.group_id IS NOT NULL) 

END 

toute aide appréciée

grâce

+5

jamais entendu parler de l'écran-grappins ?! Vous travaillez avec des ordinateurs, et vous prenez une photo de l'écran!?! – freefaller

+1

où est votre procédure stockée? partager le code. pas une capture d'écran –

+0

Pourquoi utilisez-vous des indicateurs de table ('WITH (NOLOCK)')? C'est [recommandé à moins de déboguer des problèmes de performances spécifiques] (http://msdn.microsoft.com/en-us/library/ms187373.aspx). – CodeCaster

Répondre

0

essayer avec ce code

   string stringConnection = "Your connection to your database"; 
      using(var connection = new SqlConnection(stringConnection) 
      { 
       connection.Open(); 

       using (var command = new SqlCommand("sp_intranet_GetSecurity", connection)) 
       { 
        command.CommandType = CommandType.StoredProcedure; 

        command.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar)); 
        command.Parameters["@username"].Value = "Your value"; 

        command.Parameters.Add(new SqlParameter("@path", SqlDbType.VarChar, 8)); 
        command.Parameters["@path"].Value = "Your value"; 

        command.Parameters.Add(new SqlParameter("@errorID", SqlDbType.VarChar, 8)); 
        command.Parameters["@errorID"].Value = "Your value"; 
        command.Parameters["@errorID"].Direction = ParameterDirection.Output; 

        // Objet DataReader 
        SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection); 
        Object[] row = null; 
        while (reader.Read()) 
        { 
         if (row == null) 
         { 
          row = new Object[reader.FieldCount]; 
         } 
         reader.GetValues(row); 
         for (int i = 0; i < row.GetLength(0); i++) 
         { 
          if (row[i] != DBNull.Value) 
          { 
           Console.Write(row[i]); 
          } 
          else 
          { 
           Console.Write("NULL"); 
          } 
          if (i < row.GetUpperBound(0)) 
          { 
           Console.Write("|"); 
          } 
         } 
        } 


       } 
      } 
Questions connexes