2012-07-03 170 views
0

我是存储过程世界的新手。存储过程输出值到变量

我们有现有的存储过程,它检查用户名和url路径的系统。存储过程将检查用户详细信息是否存在。如果存在用户名所属的返回值组名。

我想要的是为此存储过程编写asp.net c#代码。传递用户详细信息和路径并将存储过程返回值返回到字符串变量。

下面链接,SQL Server中执行存储过程

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

以下链接为SQL Server产值样子

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

注意到上图中组名是空的,因为我执行存储程序输入错误,并且在sqlserver中没有该数据的组名。如果存在它将返回组名称的值,如“管理员”或“经理”

我的问题是“如果数据存在并返回组名称,我想将该值传递给字符串变量”分配参数和通过返回值成字符串变量

这是我的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 

任何帮助赞赏

感谢

+5

听过屏幕争夺的?你正在使用电脑,并且你拍了一张屏幕的照片!?! – freefaller

+1

你的存储过程在哪里?分享代码。不是屏幕截图 –

+0

为什么你使用表提示('WITH(NOLOCK)')?这是[不建议除非调试特定的性能问题](http://msdn.microsoft.com/en-us/library/ms187373.aspx)。 – CodeCaster

回答

0

尝试使用此代码

   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("|"); 
          } 
         } 
        } 


       } 
      }