Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 制作一个接受多个用逗号分隔的参数的Web服务(asp.NET)_C#_Asp.net_Sql - Fatal编程技术网

C# 制作一个接受多个用逗号分隔的参数的Web服务(asp.NET)

C# 制作一个接受多个用逗号分隔的参数的Web服务(asp.NET),c#,asp.net,sql,C#,Asp.net,Sql,我有以下Web服务和SQL查询: public class DIENSTLEISTUNG { public string DienstleistungName { get; set; } public string DienstleistungArtBezeichnung { get; set; } } internal static List<DIENSTLEISTUNG> Die

我有以下Web服务和SQL查询:

  public class DIENSTLEISTUNG
        {
            public string DienstleistungName { get; set; }
            public string DienstleistungArtBezeichnung { get; set; }
        }

        internal static List<DIENSTLEISTUNG> Dienstleistung(string RAUM_ID)
        {
            List<DIENSTLEISTUNG> BestuhlungObject = new List<DIENSTLEISTUNG>();

using (SqlConnection con = new SqlConnection(@"Data Source=Localhost\SQLEXPRESS;Initial Catalog=BOOK-IT-V2;Integrated Security=true;"))
            using (SqlCommand cmd = new SqlCommand(@"
                                       SELECT
                                       DISTINCT dl.NAME AS NAME, da.BEZEICHNUNG AS BEZEICHNUNG
                                       FROM RAUM r
                                       RIGHT JOIN DIENSTLEISTUNG_Raum bs ON bs.RAUM_ID = (" + Room_ID + ") 
                                       RIGHT JOIN DIENSTLEISTUNG ba ON bs.DIENSTLEISTUNG_ID = ba.ID 
                                       RIGHT JOIN DIENSTLEISTUNGSART da ON ba.DIENSTLEISTUNGSART_ID = da.ID
                                       RIGHT JOIN DIENSTLEISTER dl ON da.DIENSTLEISTER_ID = dl.ID", con))

            {
                con.Open();
                using (SqlDataReader rdr = cmd.ExecuteReader())
                {
                  while (rdr.Read())
                    {
                        if (rdr["NAME"] != DBNull.Value && rdr["BEZEICHNUNG"] != DBNull.Value)
                        {

                            BestuhlungObject.Add(new DIENSTLEISTUNG()
                               {                                                                                                                                      
                                DienstleistungName = rdr["NAME"].ToString(),
                                DienstleistungArtBezeichnung = rdr["BEZEICHNUNG"].ToString()
                             });

                        }

                    }
                }
            }
            return BestuhlungObject;
        }

    }
}
public类dienstleiston
{
公共字符串DienstleistungName{get;set;}
公共字符串DienstleistungArtBezeichnung{get;set;}
}
内部静态列表DIENSTLEISTONG(字符串RAUM_ID)
{
List BestuhlungObject=新列表();
使用(SqlConnection con=newsqlconnection(@“数据源=Localhost\SQLEXPRESS;初始目录=BOOK-IT-V2;集成安全性=true;”)
使用(SqlCommand cmd=newsqlcommand(@)
挑选
不同的dl.NAME作为名称,da.bezeichung作为bezeichung
来自劳姆r
右键连接bs上的DIENSTLEISTUNG_Raum bs。Raum_ID=(“+房间ID+”)
在bs.DIENSTLEISTUNG_ID=ba.ID上右键连接DIENSTLEISTUNG ba
右键连接ba.DIENSTLEISTUNGSART_ID=da.ID上的DIENSTLEISTUNGSART da
在da.DIENSTLEISTER上右键连接DIENSTLEISTER dl(ID=dl.ID“,con))
{
con.Open();
使用(SqlDataReader rdr=cmd.ExecuteReader())
{
while(rdr.Read())
{
if(rdr[“NAME”!=DBNull.Value&&rdr[“BEZEICHNUNG”]!=DBNull.Value)
{
添加(新的DIENSTLEISTUNG()
{                                                                                                                                      
DienstleistungName=rdr[“名称”].ToString(),
DienstleistungartBezeichung=rdr[“Bezeichung”].ToString()
});
}
}
}
}
返回BesthulungObject;
}
}
}
这个Web服务工作得很好。我可以发送一个房间_ID=219并获得预期的输出。我的问题是,如何发送多个房间ID(用逗号分隔)。例如:房间ID=219220221

有人能帮我吗

提前感谢

请参见

多种方法之一(MS SQL 2005+),如果可以将参数作为xml传递:

var sql =
    @"SET ARITHABORT ON;
    SELECT ...  
    RIGHT JOIN DIENSTLEISTUNG_Raum bs ON bs.RAUM_ID IN
    (
        SELECT tbl.col.value('.', 'varchar(20)')
        FROM @xml.nodes('id') as tbl(col)
    ) ...";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.Add("@xml", SqlDbType.Xml).Value = "<id>111</id><id>222</id><id>333</id>";

您必须在(“+Room\u ID+”)SQL注入风险中将Room\u ID发送为“219”、“220”、“221”,并将此bs.RAUM\u ID=(“+Room\u ID+”)更改为bs.RAUM\u ID。如果房间ID制作正确,您可能会遇到麻烦。永远不要连接字符串以形成SQL语句。请改用参数。@用户1043021。那不行。我使用浏览器调用Webmethod,我发送房间ID,比如219220,221@spender:Oops true,Paks是RAUM_ID,是DB或varchar?@user1042031中的整数类型。ID是varchar。
var sql =
    @"SELECT ...    
    RIGHT JOIN DIENSTLEISTUNG_Raum bs ON @ids LIKE '%,' + bs.RAUM_ID + ',%'
    ...";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.Add("@ids", SqlDbType.VarChar).Value = ",111,222,333,";