C# 存储过程动态where子句,从变量获取值

C# 存储过程动态where子句,从变量获取值,c#,asp.net,sql-server,stored-procedures,C#,Asp.net,Sql Server,Stored Procedures,我正在使用sql server、c、asp.net。我正在做一个项目,其中菜单是根据用户的权限从数据库中动态显示的。现在这是我的存储过程 Create Proc spGetMenuData as Begin Select * from tblMenu1 End 我的数据库中有一个用户表、一个角色表和一个菜单表。 用户:userid、username、pass、roleid 角色:角色ID、名称管理员、用户 菜单:menuid,name,url,roleid,userid或menuid,nam

我正在使用sql server、c、asp.net。我正在做一个项目,其中菜单是根据用户的权限从数据库中动态显示的。现在这是我的存储过程

Create Proc spGetMenuData
as
Begin
 Select * from tblMenu1
End
我的数据库中有一个用户表、一个角色表和一个菜单表。 用户:userid、username、pass、roleid 角色:角色ID、名称管理员、用户 菜单:menuid,name,url,roleid,userid或menuid,name,url,roleid请告诉我什么更合适 现在,我想要的是让userid和他的roleid检查菜单。我可以将userid存储到程序中的变量中,并将其传递给存储过程。 比如:

请帮帮我,我只是个初学者。 提前谢谢

以下是我要做的: 用户表:用户id、用户名、密码、角色id 角色表:角色id、角色名称 菜单\角色表:角色\ id,菜单\ id 菜单表:菜单id、名称、url 然后,我将指定菜单属于一个角色,并且具有属于用户的角色。 然后,要获取给定用户的菜单id、名称和url:


尝试为usersmenu创建表,而不是依赖菜单,因为您的多对多表?对不起,这是tblMenu1非菜单。这是我的usersmenu。如何对存储过程执行@someuserName变量?而且您不能从用户中选择菜单id,您可以从C应用程序将其传递到存储过程中。然后在存储过程的开头声明它,例如@someUsername VARCHAR100。您也是对的,菜单id不在用户中,应该已读取角色id。我将对其进行编辑。您是否建议我执行简单的命令而不是存储过程?如果使用存储过程,则易于维护。如果您的应用程序发生了巨大的变化,那么您的所有数据库代码都集中在一个地方。然而,我目前是一名.NET开发人员,如果我能在应用程序代码中加入查询,我会这样做。我会创建一个单独的类来放入所有与数据库相关的代码,比如dbHelper.cs。然后调用dbHelper类的各种函数来检索数据。这样,如果我确实需要更改我的DB代码,我可以在dbHelper类中找到它。这远远超出了这个问题的范围。关于如何通过.NET应用程序与SQL Server通信,web上有大量的资源。
Create Proc spGetMenuData
as
Begin
 Select * from tblMenu1 //(WHERE tblMenu1.userid = useridfromthevariable and tblMenu1.roleid = useridfromthevariable's roleid)
End
CREATE PROCEDURE getMenus
    @someUserName
AS 

    SET NOCOUNT ON;
    SELECT menu_id, name, url FROM menus WHERE menu_id 
    IN (select menu_id from users
 JOIN menu_roles ON users.role_id=menu_roles.role_id WHERE username=@someUserName)
GO