"Cannot perform '=' operation on System.Int32 and System.String" 正在执行搜索
"Cannot perform '=' operation on System.Int32 and System.String" while performing a search
正在尝试通过 DataList 进行搜索,参数是电影类型(通过数据库加载,因此没有 switch case)和名称
protected void ButtonFilter_Click(object sender, EventArgs e)
{
string filter = "";
int selectedCount = 0;
for (int i = 0; i < this.CheckBoxListGenres.Items.Count; i++)
if (this.CheckBoxListGenres.Items[i].Selected)
selectedCount++;
if (selectedCount > 0)
{
filter = "GenreID=";
int n = 0; //Used to determine to which genre the loop has arrived
for (int i = 0; i < this.CheckBoxListGenres.Items.Count; i++)
{
if (this.CheckBoxListGenres.Items[i].Selected)
{
if (n > 0 && n < selectedCount)
filter += " AND ";
filter+="'*"+this.CheckBoxListGenres.Items[i].Value.ToString()+"*'";
n++;
}
}
if (this.TextBoxMovieName.Text!="")
filter += " AND MovieName LIKE '*" + this.TextBoxMovieName.Text + "*'";
DataTable dataTable = ((DataSet)Application["DataSetMovies"]).Tables[0];
DataView dataView = new DataView(dataTable);
filter = Convert.ToString(filter);
dataView.RowFilter = filter; //!Getting the error here!
this.DataListMovies.DataSource = dataView;
this.DataListMovies.DataBind();
}
}
试过调试,字符串本身似乎没问题,所以我尝试在过滤器上使用 Convert.ToString() ,只是为了确定,但没关系。
帮忙?
提前致谢
您的条件中的过滤器可能无效,因此请在 AND
的位置使用 OR
Use %
, insted of *
in LIKE
Operator
I.E filter += " AND MovieName LIKE '%" + this.TextBoxMovieName.Text + "%'";
protected void ButtonFilter_Click(object sender, EventArgs e)
{
string filter = "";
int selectedCount = 0;
for (int i = 0; i < this.CheckBoxListGenres.Items.Count; i++)
if (this.CheckBoxListGenres.Items[i].Selected)
selectedCount++;
if (selectedCount > 0)
{
filter = "GenreID=";
int n = 0; //Used to determine to which genre the loop has arrived
for (int i = 0; i < this.CheckBoxListGenres.Items.Count; i++)
{
if (this.CheckBoxListGenres.Items[i].Selected)
{
if (n > 0 && n < selectedCount)
filter += " OR ";
filter+="'%"+this.CheckBoxListGenres.Items[i].Value.ToString()+"%'";
n++;
}
}
if (this.TextBoxMovieName.Text!="")
filter += " OR MovieName LIKE '%" + this.TextBoxMovieName.Text + "%'";
DataTable dataTable = ((DataSet)Application["DataSetMovies"]).Tables[0];
DataView dataView = new DataView(dataTable);
filter = Convert.ToString(filter);
dataView.RowFilter = filter;
this.DataListMovies.DataSource = dataView;
this.DataListMovies.DataBind();
}
}
这不是编译时错误这是运行时错误。
嗯,在你的数据库中,你正在应用过滤器的东西是 Int32 类型..
例如,如果你有类似 Num
的东西,它属于 Int32
,但你做了如下的事情 :-
dv.RowFilter = "Num = '7097'" ////This will have error
它会抛出错误,因为它需要:-
dv.RowFilter = "Num = 7097" ////This is correct
所以在你的情况下你有 GenreID
它是 Int32 但在你的代码中你提供了一些字符串来反对它。
您的 GenreID 列可能是一个 INTEGER
,您正在将它与 STRING
进行比较,如 '**'
中所示。在此示例中,我使用 IN
运算符一次列出所有值,它们之间没有 AND 运算符,这会导致逻辑错误,因为 none 项目将具有 GenreID=1 和 GenreID=2:
protected void ButtonFilter_Click(object sender, EventArgs e)
{
string filter = "1=1";
if (this.CheckBoxListGenres.Items.OfType<ListItem>().Any(i => i.Selected))
filter += String.Format(" AND GenreID IN ({0})'",
String.Join(",", this.CheckBoxListGenres.Items.OfType<ListItem>()
.Where(i => i.Selected).Select(i => i.Value)));
if (this.TextBoxMovieName.Text != "")
filter += " AND MovieName LIKE '%" + this.TextBoxMovieName.Text + "%'";
DataTable dataTable = ((DataSet)MediaTypeNames.Application["DataSetMovies"]).Tables[0];
DataView dataView = new DataView(dataTable);
dataView.RowFilter = filter;
DataListMovies.DataSource = dataView;
DataListMovies.DataBind();
}
正在尝试通过 DataList 进行搜索,参数是电影类型(通过数据库加载,因此没有 switch case)和名称
protected void ButtonFilter_Click(object sender, EventArgs e)
{
string filter = "";
int selectedCount = 0;
for (int i = 0; i < this.CheckBoxListGenres.Items.Count; i++)
if (this.CheckBoxListGenres.Items[i].Selected)
selectedCount++;
if (selectedCount > 0)
{
filter = "GenreID=";
int n = 0; //Used to determine to which genre the loop has arrived
for (int i = 0; i < this.CheckBoxListGenres.Items.Count; i++)
{
if (this.CheckBoxListGenres.Items[i].Selected)
{
if (n > 0 && n < selectedCount)
filter += " AND ";
filter+="'*"+this.CheckBoxListGenres.Items[i].Value.ToString()+"*'";
n++;
}
}
if (this.TextBoxMovieName.Text!="")
filter += " AND MovieName LIKE '*" + this.TextBoxMovieName.Text + "*'";
DataTable dataTable = ((DataSet)Application["DataSetMovies"]).Tables[0];
DataView dataView = new DataView(dataTable);
filter = Convert.ToString(filter);
dataView.RowFilter = filter; //!Getting the error here!
this.DataListMovies.DataSource = dataView;
this.DataListMovies.DataBind();
}
}
试过调试,字符串本身似乎没问题,所以我尝试在过滤器上使用 Convert.ToString() ,只是为了确定,但没关系。 帮忙?
提前致谢
您的条件中的过滤器可能无效,因此请在 AND
OR
Use
%
, insted of*
inLIKE
OperatorI.E
filter += " AND MovieName LIKE '%" + this.TextBoxMovieName.Text + "%'";
protected void ButtonFilter_Click(object sender, EventArgs e)
{
string filter = "";
int selectedCount = 0;
for (int i = 0; i < this.CheckBoxListGenres.Items.Count; i++)
if (this.CheckBoxListGenres.Items[i].Selected)
selectedCount++;
if (selectedCount > 0)
{
filter = "GenreID=";
int n = 0; //Used to determine to which genre the loop has arrived
for (int i = 0; i < this.CheckBoxListGenres.Items.Count; i++)
{
if (this.CheckBoxListGenres.Items[i].Selected)
{
if (n > 0 && n < selectedCount)
filter += " OR ";
filter+="'%"+this.CheckBoxListGenres.Items[i].Value.ToString()+"%'";
n++;
}
}
if (this.TextBoxMovieName.Text!="")
filter += " OR MovieName LIKE '%" + this.TextBoxMovieName.Text + "%'";
DataTable dataTable = ((DataSet)Application["DataSetMovies"]).Tables[0];
DataView dataView = new DataView(dataTable);
filter = Convert.ToString(filter);
dataView.RowFilter = filter;
this.DataListMovies.DataSource = dataView;
this.DataListMovies.DataBind();
}
}
这不是编译时错误这是运行时错误。
嗯,在你的数据库中,你正在应用过滤器的东西是 Int32 类型..
例如,如果你有类似 Num
的东西,它属于 Int32
,但你做了如下的事情 :-
dv.RowFilter = "Num = '7097'" ////This will have error
它会抛出错误,因为它需要:-
dv.RowFilter = "Num = 7097" ////This is correct
所以在你的情况下你有 GenreID
它是 Int32 但在你的代码中你提供了一些字符串来反对它。
您的 GenreID 列可能是一个 INTEGER
,您正在将它与 STRING
进行比较,如 '**'
中所示。在此示例中,我使用 IN
运算符一次列出所有值,它们之间没有 AND 运算符,这会导致逻辑错误,因为 none 项目将具有 GenreID=1 和 GenreID=2:
protected void ButtonFilter_Click(object sender, EventArgs e)
{
string filter = "1=1";
if (this.CheckBoxListGenres.Items.OfType<ListItem>().Any(i => i.Selected))
filter += String.Format(" AND GenreID IN ({0})'",
String.Join(",", this.CheckBoxListGenres.Items.OfType<ListItem>()
.Where(i => i.Selected).Select(i => i.Value)));
if (this.TextBoxMovieName.Text != "")
filter += " AND MovieName LIKE '%" + this.TextBoxMovieName.Text + "%'";
DataTable dataTable = ((DataSet)MediaTypeNames.Application["DataSetMovies"]).Tables[0];
DataView dataView = new DataView(dataTable);
dataView.RowFilter = filter;
DataListMovies.DataSource = dataView;
DataListMovies.DataBind();
}