2

我有一个ListView包含来自 SQL 数据库的数据,我使用ListView项目中的标记值来存储uniqueid来自数据库的一个(因此我不必在其中创建一个额外的隐藏列ListView来存储它)。

我收到以下错误:

System.InvalidCastException 发生

这是我的代码:

using (SqlCommand sqlCommand = new SqlCommand("SELECT * FROM Employees WHERE ID = @ID",     DBFactory.GetSqlConnection()))
{
    sqlCommand.Parameters.Add("@ID", SqlDbType.UniqueIdentifier).Value = ((Guid)listView1.SelectedItems[0].Tag);

    using (SqlDataAdapter sda = new SqlDataAdapter(sqlCommand))
    {
        sda.Fill(table);
    }
}

有什么想法/建议吗?

编辑:我发现 listView1.SelectedItems.SelectedItemArray[0].Tag object {string} 的类型是。很奇怪,因为“ID”列的 DataType = UniqueIndentifier..

4

2 回答 2

2

您可能必须将其解析为 GUID 而不是强制转换。

sqlCommand.Parameters.Add("@ID", SqlDbType.UniqueIdentifier).Value =
    (new Guid(listView1.SelectedItems[0].Tag));
于 2012-12-21T20:49:24.240 回答
0

显然listView1.SelectedItems[0].Tag,无论您在其中存储什么,它始终是一个字符串。

通过更改SqlDbType.UniqueIdentifierto解决了SqlDbType.VarChar

于 2012-12-21T21:03:07.953 回答