你如何使用MySql IN子句

我试图弄清楚如何在ASP.NET C#中使用MySql In cluse。 这是我的代码

var WebSites = string.Join(",", wsl.Select(x => "'" + x.DomainUrl + "'").ToArray()); string q = "select Id, Url, Title, Date, ImageUrl from post where WebSiteUrl IN (@Url)"; 

当我不使用参数时,此代码有效。 当我包含参数时,我得不到查询的结果。

这是我的参数代码

 cmd.Parameters.Add("@Urls", MySqlDbType.Text).Value = WebSites; 

这是完整的代码

  public static IList FindPostsByWebSiteList(IEnumerable wsl) { var pl = new List(); var WebSites = string.Join(",", wsl.Select(x => "'" + x.DomainUrl + "'").ToArray()); string q = "select Id, Url, Title, Date, ImageUrl from post where WebSiteUrl IN (@Urls)"; using (MySqlConnection con = new MySqlConnection(WebConfigurationManager.ConnectionStrings["MySqlConnectionString"].ToString())) { using (MySqlCommand cmd = new MySqlCommand(q, con)) { cmd.Parameters.Add("@Urls", MySqlDbType.Text).Value = WebSites; con.Open(); var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); while (reader.Read()) { var p = new Post(); p.Id = reader.GetInt32("Id"); p.Url = reader.GetString("Url"); p.Title = reader.GetString("Title"); p.Date = reader.GetDateTime("Date"); p.ImageUrl = reader.GetString("ImageUrl"); pl.Add(p); } return pl; } } } 

您引用了@Url而不是@Urls

也许你的问题只是一个错字

我找到了答案。 这里是

  public static IList FindPostsByWebSiteList(string[] urls) { var pl = new List(); var urlArray = urls.Select((x,y) => "@url" + y.ToString()).ToArray(); var urlsJoined = string.Join(",", urlArray); string q = string.Format("select Id, Url, Title, Date, ImageUrl from post where WebSiteUrl IN ({0})", urlsJoined); using (MySqlConnection con = new MySqlConnection(WebConfigurationManager.ConnectionStrings["MySqlConnectionString"].ToString())) { using (MySqlCommand cmd = new MySqlCommand(q, con)) { for (int x = 0; x < urlArray.Length; x++) { cmd.Parameters.Add(urlArray[x], MySqlDbType.Text).Value = urls[x]; } con.Open(); var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); while (reader.Read()) { var p = new Post(); p.Id = reader.GetInt32("Id"); p.Url = reader.GetString("Url"); p.Title = reader.GetString("Title"); p.Date = reader.GetDateTime("Date"); p.ImageUrl = reader.GetString("ImageUrl"); pl.Add(p); } return pl; } } } 

IN语句应该期望一个字符串数组,并且您传递一个字符串

你的最终SQL看起来像这样:

 select Id, Url, Title, Date, ImageUrl from post where WebSiteUrl IN ('url1,url2,url3') 

代替

 select Id, Url, Title, Date, ImageUrl from post where WebSiteUrl IN ('url1', 'url2', 'url3') 

检查这个问题:

将List 添加到mysql参数