Guid已转换为int32

本文关键字:int32 转换 Guid | 更新日期: 2023-09-27 18:00:40

我正试图以编程方式将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。不过只是猜测,如果有人知道更多,请通知我。

Guid已转换为int32

与SQL一样,最好使用数据访问层中的工具将参数作为其实际类型传递(根据需要进行适当的数据层->数据库转换),而不是使用字符串。

看起来LinqDataSource有一个WhereParameters集合,所以你可以创建你的where,比如:

LinqDataSource2.Where = "UserID = @UserID";

然后将适当的参数添加到WhereParameters集合中。(注意,我还没有写这样的代码,只是简单介绍了一些细节,但看起来不错)

如果要将id作为字符串与GUID进行比较,则需要将GUID字段强制转换为字符串。实现这一点的最简单方法是在GUILD字段上调用ToString()方法。

试试这个:

LinqDataSource2.Where = "UserID = '" + id.ToString("B") + "'";

这将以以下形式传递GUID:{00000000-0000-0000-0000-000000000000}
希望这就是数据库所期望的。