C# 制作一个接受多个用逗号分隔的参数的Web服务(asp.NET)
我有以下Web服务和SQL查询: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
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,";