繁体   English   中英

Guid 转换为 int32

[英]Guid converted to int32

我正在尝试以编程方式将 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 是标准类型,当 where 参数中没有设置任何内容时,只有 where 参数。 只是猜测,如果有人知道更多,请告诉我。

与 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}
希望这就是数据库所期望的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM