1

我在下面收到Index out bounds error一个FullName property。我有我的persondetails班级和data班级,我正在SqlDataReader尝试调用这个属性。firstname和值是使用存储过程返回的lastname,然后我想创建一个属性来连接这两个,并且能够调用FullName我的存储过程。

persondetails班级

private string firstName;
private string lastName;
private string fullName;

public string FirstName
{
    get { return firstName;}
    set { set firstName = value;}
}

public string LastName
    get { return lastName; }
    set { set lastName = value; }

public string FullName
    get { return lastName + "," + firstName;
}

public persondetails(string lastName, string firstName)
{
    this.lastName = lastName;
    this.firstName = firstName;
}

data班级

public List<Persondetails> getFullName()
{
    // Do my sql connection stuff
    List<Persondetails> persondetails = new List<Persondetails>();
    Persondetails person;

    try
    {
        // open connection
        // specify "stored Procedure" (which returns firstname and lastname)

        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                person = new Persondetails((
                reader.GetString(reader.GetOrdinal("LASTNAME")));
                reader.GetString(reader.GetOrdinal("FIRSTNAME")));
                persondetails.Add(person);
            }
            reader.Close();
            return persondetails;
        }
        // the rest of my method

存储过程只是从我的表中返回lastname和返回,firstname该表有 2 个单独的字段。我不想在这里进行连接,我想在我的属性中进行连接。

已编辑***工作代码

4

3 回答 3

3

由于string在 C# 6.0 中添加了类似的插值功能,我们可以连接string如下

public string FullName => $"{firstName} {lastName}";
于 2017-09-08T13:19:41.447 回答
1

您没有从名为“FullName”的存储过程返回的列是问题所在。这就是你得到错误的原因。

如果您的存储过程返回 FirstName 和 LastName,您需要将它们存储在相应的属性中。

我希望你有一个方法可以从数据库中填充你的类......并且在它里面有这样的东西......

FirstName = reader.GetString(reader.GetOrdinal("FirstName")));  
LastName = reader.GetString(reader.GetOrdinal("LastName")));  

这将在您的班级中填充您的 FirstName 和 LastName....然后您的 FullName 属性将起作用,因为它只是连接 FirstName 和 LastName。

于 2013-07-16T02:28:16.357 回答
1

您实际上并没有在类构造函数中设置firstNameand字段,而是在构造函数和属性lastName中复制代码。FullName你需要做的是:

public string FullName
    get { return this.lastName + "," + this.firstName;
}

public persondetails(string lastName, string firstName)
{
    this.firstName = firstName;
    this.lastName = lastName;
}

这将确保FullName正确计算属性值。

于 2013-07-16T12:10:47.213 回答