我应该将SQL Server的UNIQUEIDENTIFIER检索到什么C#数据类型中?

3

I have a table like

CREATE TABLE Partners 
(
    id UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(),
    name NVARCHAR(50) NOT NULL,
    email NVARCHAR(254) NOT NULL, -- 254 is optimal length according to https://dev59.com/uHM_5IYBdhLWcg3w2XHw
    PRIMARY KEY (id)
);

以及一个简单的存储过程:

CREATE PROCEDURE GetPartnersWithIds
AS
    SELECT id, name 
    FROM Partners;

我试图将结果读入一个List<PartnerWithId>中,其中PartnerWithId由以下代码定义。
public class PartnerWithId
{
    public Guid Id { get; set; }
    public string Name { get; set; }
} 

我做到这一点的方法是:
    public List<PartnerWithId> GetPartners ( )
    {
        List<PartnerWithId> Partners = new List<PartnerWithId>();

        using (SqlCommand cmd = new SqlCommand("GetPartnersWithIds", this._Conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            this._Conn.Open();

            using (SqlDataReader dataReader = cmd.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    Partners.Add(new PartnerWithId {
                        Id = (Guid)dataReader.GetString(0),
                        Name = dataReader.GetString(1)
                    });
                }
            }
            this._Conn.Close();
        }
        return Partners;
    }

但是我遇到了一个错误

无法将类型为 string 的值转换为 System.Guid

在代码块 (Guid)dataReader.GetString(0) 上(其实只是一个猜测)。请问获取该值的正确方法是什么?


你之所以会出现那个错误,是因为你正在使用 DataReader 类的 GetString() 方法。你应该使用 GetGuid() 方法。 - Zohar Peled
1个回答

3

不要使用cast,尝试使用Guid字符串创建Guid,或者使用Guid.Parse

 Id = new Guid(dataReader.GetString(0)),

最好直接使用 DataReader.GetGuid() 而不是获取字符串并将其转换为 Guid。
 Id = dataReader.GetGuid(0),

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接