我正在尝试以编程方式将where子句添加到gridview的LinqDatasource中,但我不断得到一个例外:“运算符'='与操作数类型'Guid'和'Int32'不兼容”
if (e.CommandName == "getuser")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow selectedRow = GridView1.Rows[index];
Guid id = new Guid(selectedRow.Cells[1].Text);
LinqDataSource2.Where = "UserID = " + id;
GridView1.DataSourceID = LinqDataSource2.ID;
GridView1.DataBind();
}
任何人都知道我的Guid如何,何时以及为何转换为int?
固定
添加了一行
LinqDataSource2.WhereParameters.Add("UserID", System.Data.DbType.Guid, id.ToString());
我猜测int32是一个标准类型,当whereparameters中没有设置任何东西,但只有where。 只是猜测,如果有人知道更多,请通知我。
答案 0 :(得分:3)
与SQL一样 - 您最好使用数据访问层中的工具将参数作为实际类型传递(使用适当的数据层 - 根据需要进行数据库转换),而不是使用字符串。< / p>
看起来LinqDataSource有一个WhereParameters集合,所以你可以创建类似的地方:
LinqDataSource2.Where = "UserID = @UserID";
然后在WhereParameters集合中添加适当的参数。 (注意,我没有写过这样的代码,只是简单介绍一下,但它看起来是对的)
答案 1 :(得分:0)
如果您要将您的id作为字符串与GUID进行比较,那么您需要将GUID字段转换为字符串。实现此目的的最简单方法是在GUILD字段上调用ToString()方法。
答案 2 :(得分:0)
试试这个:
LinqDataSource2.Where = "UserID = '" + id.ToString("B") + "'";
这将以以下形式传递GUID:{00000000-0000-0000-0000-000000000000}
希望这就是数据库所期望的。