【发布时间】:2011-10-11 21:22:39
【问题描述】:
我试图弄清楚如何将 MySql In cluse 与 ASP.NET C# 一起使用。这是我的代码
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<Post> FindPostsByWebSiteList(IEnumerable<WebSite> wsl)
{
var pl = new List<Post>();
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 绑定在一个字符串中。
-
我对C#中的绑定参数不熟悉,但是你确定可以这样绑定吗?通常您将绑定查询的实际参数。您正在做的是绑定查询的一部分。
IN子句需要一个逗号分隔的列表。相反,您给它一个变量,其值包含逗号分隔列表的文本。我想这会导致问题。