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>
4

2 に答える 2

0

コマ区切りリストを分割するSQL関数を作成できます

    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      

これで、コンマ区切りのリストをこの関数に渡すことができます。

@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 Patient_ID=@patient_Id                                       
AND ID NOT in (SELECT Ltrim(Rtrim(Data)) FROM Split(@configIds,','))                    
)   

コードを更新.....

ブロックの削除後、更新フラグをtrueに設定するか、チェックボックスリストの新しく選択されたレコードに基づいてレコードを更新します

于 2012-09-13T14:08:38.683 に答える
0

クエリで使用して、カンマ区切りの文字列を作成し、クエリにポップすることができます。

string inClause = "1, 2, 3";

var sqls = "SELECT * FROM Brands WHERE Name in (" + inClause +")";
于 2012-08-03T14:23:14.927 に答える