2012-08-03 101 views
1

如何在选中多个复选框 时从数据库中选择多行。这里的代码。如果你看看我使用查询字符串的行 有双重请求,我不知道我还要插入什么。当选中多个复选框时从数据库中选择

@{ 
    var db = Database.Open("Checkbox"); 
    var sql = "SELECT * FROM Brands"; 
    var select = db.Query(sql); 
    dynamic execute = ""; 
    List<String> selected = new List<string>(); 
    int count = 0; 
    List<dynamic> exec = new List<dynamic>(); 


    if(IsPost){ 
     if(Request["List"] == null){ 
      Response.Redirect("~/Checkbox"); 
     } 
     selected = Request["List"].Split(',').ToList(); 

     count = Request["List"].Count(); 

     var sqls = "SELECT * FROM Brands WHERE Name = @0 OR Name = @1"; 
     exec = db.Query(sqls, Request["List"], Request["List"]); 



} 

<!DOCTYPE html> 
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Checkbox Multiple</title> 
</head> 
<body> 
    @foreach(var values in exec){ 
     <span>@values.BrandID</span> 
    } 

    <form method="post" action=""> 
    @foreach(var item in select){ 
    <label>@item.Name</label>  
    <input type="checkbox" multiple="multiple" name="List" value="@item.Name"><br> 
    } 
    <input type="submit" value="Send">  
     </form> 
</body> 


</html> 

回答

0

您可以尝试在查询中使用并构造一个逗号分隔的字符串并将其弹出到查询中。

string inClause = "1, 2, 3"; 

var sqls = "SELECT * FROM Brands WHERE Name in (" + inClause +")"; 
+0

请小心SQL注入攻击! – 2012-08-03 14:24:12

0

您可以创建拆分昏迷分隔列表

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER FUNCTION [dbo].[Split]  
(  
@RowData varchar(8000),  
@SplitOn nvarchar(5)  
)  
RETURNS @RtnValue table  
(  
Id int identity(1,1),  
Data nvarchar(100)  
)  
AS  
BEGIN  
Declare @Cnt int  
Set @Cnt = 1  

While (Charindex(@SplitOn,@RowData)>0)  
Begin  
    Insert Into @RtnValue (data)  
    Select  
    Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))  

    Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))  
    Set @Cnt = @Cnt + 1  
End  

Insert Into @RtnValue (data)  
Select Data = ltrim(rtrim(@RowData))  

Return  
END  

现在,你可以通过用逗号分隔的列表,此功能的SQL函数。

假设 @configIds =“1,2,3,4,6,17” 将插入数据针对每个ID可分离

INSERT INTO ABC  
(ID,patient_id,created_user,created_date)  
SELECT data, @patient_Id, @created_user, Getdate()FROM Split(@configIds,',') 

或它可用于同时更新所选择的新的复选框列表记录 首先删除这是不是在逗号分隔的列表(@configIds)记录

DELETE FROM ABC WHERE ID IN      
(SELECT DISTINCT ID FROM ABC WHERE [email protected]_Id          
AND ID NOT in (SELECT Ltrim(Rtrim(Data)) FROM Split(@configIds,','))      
) 

更新代码.....

将删除块设置为更新标志为true或更新基于新选择的复选框列表的记录

相关问题