Guid转换为int32

时间:2011-06-30 08:10:00

标签: c# asp.net linq-to-sql gridview guid

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

3 个答案:

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