就是在数据库中定义了一个存储过程,如下:Use PCWEBSITE
If exists(select * from sysobjects where name ='admin_login' and type ='P')
Drop procedure admin_login
go
create procedure admin_login
(
@userName varchar(50),
@passWord varchar(50),
    @userName1 varchar(50),
    @passWord1 varchar(50),
    @Table varchar(50)
)
as
   if not exists(select * from @Table where @userName1 = @userName)
    return 1  -- 表示不存在该用户
   else 
      begin
   if not exists(select * @Table tb_admin where @userName1 = @userName and @passWord1=@passWord)
    return 2  --表示密码错误
   else
    return 3  --表示登陆成功
      end 
GO怎样在ASP.NET中给这些参数赋值才能执行这个存储过程,把参数@Table和@userName1、@userName2赋的值转换为表名和列名请各位高手帮帮忙了,谢谢……

解决方案 »

  1.   

    DEMOset ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER proc [dbo].[InsertUsers]
    (
        @UserName varchar(255),@Password varchar(255),@UserID int output
    )
    as
    insert into Users(UserName,Password)values(@UserName,@Password)
    set @UserID=@@Identity
    调用
     using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
                conn.Open();
                SqlCommand cmd = new SqlCommand("[InsertUsers]", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@UserName", TextBox1.Text));
                cmd.Parameters.Add(new SqlParameter("@Password", TextBox2.Text));
                cmd.Parameters.Add(new SqlParameter("@UserID", 0)).Direction = ParameterDirection.Output;
                int result = cmd.ExecuteNonQuery();
                Response.Write(result + " UserID:" + cmd.Parameters["@UserID"].Value);
            }
      

  2.   

    楼主的意思是想这样?DECLARE @strSql varchar(4000)
    set @strSql ='select * from '+ @Table +' where ' + @userName1 +' = '+ @userName
    exec( @strSql )
      

  3.   

    大概就是这样吧,详细的要你自己慢慢调试了exec(' if not exists(select * from '+ @Table +' where '+ @userName1 +'=''' + @userName +''')'
    +'return 1 -- 表示不存在该用户'
    +'  else  '
    +'  begin '
    +'if not exists(select * '+ @Table + ' where ' + @userName1 +'='''+  @userName +''' and '+ @passWord1 +'='''+ @passWord +''')'
    +'return 2 --表示密码错误'
    +'else'
    +'return 3 --表示登陆成功'
    +'  end  ')
      

  4.   

    赋值?不是很明白,你不是想这样执行吗?exec是一个执行字符串命令的函数,类似js的evel
      

  5.   


    @Table等是参数啊,你调用时不是要赋值吗?要把实参赋给形参啊……
      

  6.   

    说了一大堆,你是想问C#怎么执行存储过程啊?                    SqlCommand cmd = new SqlCommand();
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "exec admin_login @userName,@passWord,@userName1,@passWord1,@Table";
                        cmd.Parameters.Add("@userName", userName);
                        cmd.Parameters.Add("@passWord", passWord);
                        cmd.Parameters.Add("@userName1", userName1);
                        cmd.Parameters.Add("@passWord1", passWord1);
                        cmd.Parameters.Add("@Table", Table);
      

  7.   

    不是啊,要在执行存储过程的时候@Table得到的是表,你的 cmd.Parameters.Add("@Table", Table);在存储过程中能识别Table的值是表吗?Table你是怎么定义的啊,是字符串吗,如string Table=“admin_password";
      

  8.   

    这是一个分页的存储过程,拿去做研究吧 CREATE PROCEDURE PrcTest 
    -- 获得某一页的数据 -- 
    @currPage int = 1,                                 --当前页页码 (即Top currPage) 
    @showColumn varchar(2000) = '*',        --需要得到的字段 (即 column1,column2,......) 
    @tabName varchar(2000),                    --需要查看的表名 (即 from table_name) 
    @strCondition varchar(2000) = '',           --查询条件 (即 where condition......) 不用加where关键字 
    @ascColumn varchar(100) = '',              --排序的字段名 (即 order by column asc/desc) 
    @bitOrderType bit = 0,                          ---排序的类型 (0为升序,1为降序) 
    @pkColumn varchar(50) = '',                 --主键名称 
    @pageSize int = 20                               --分页大小 AS 
    BEGIN -- 存储过程开始 
    -- 该存储过程需要用到的几个变量 
    DECLARE @strTemp varchar(1000) 
    DECLARE @strSql varchar(4000)           --该存储过程最后执行的语句 
    DECLARE @strOrderType varchar(1000)     --排序类型语句 (order by column asc或者order by column desc) BEGIN 
    IF @bitOrderType = 1   -- bitOrderType=1即执行降序 
    BEGIN 
        SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC' 
        SET @strTemp = '<(SELECT min' 
    END 
    ELSE 
    BEGIN 
        SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC' 
        SET @strTemp = '>(SELECT max' 
    END IF @currPage = 1    -- 如果是第一页 
    BEGIN 
        IF @strCondition != '' 
            SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+ 
                ' WHERE '+@strCondition+@strOrderType 
        ELSE 
            SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+@strOrderType 
    END ELSE    -- 其他页 
    BEGIN 
        IF @strCondition !='' 
            SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+ 
            ' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+ 
            ' '+@pkColumn+' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType 
        ELSE 
            SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+ 
            ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+ 
            ' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType 
    END END 
    EXEC (@strSql) 
    END  -- 存储过程结束  
     
    --prcPageResult 1,'*','TableName','','CreateDate',1,'PkID',25 
    /* 
    下面的存储过程查询表的记录数 
    CREATE PROC prcRowsCount 
    @tabName varchar(200),            --需要查询的表名 
    @colName varchar(200)='*',        --需要查询的列名 
    @condition varchar(200)=''       --查询条件 
    AS 
    BEGIN 
        DECLARE @strSql varchar(255) 
        IF @condition = '' 
            SET @strSql='select count('+@colName+') from '+@tabName 
        ELSE 
            SET @strSql='select count('+@colName+') from '+@tabName+' where '+@condition 
        EXEC (@strSql) 
    END 
    */ 
    GO