首页 > 解决方案 > 错误:位置 0 处没有行如何修复

问题描述

此图像是用户登录后,他们将能够查看其帐户详细信息的位置。

此图像是另一个允许用户更改用户名的小表单。

目前,错误是在更改用户名后。当它返回到图像 1 中的页面时,它崩溃了。

public void showdata()
{
    cmd.CommandText = "Select * from Registration where Username='" + Session["user"] + "'";
    cmd.Connection = con;
    sda.SelectCommand = cmd;
    sda.Fill(ds);

    lblUsername.Text = ds.Tables[0].Rows[0]["Username"].ToString();// error occur at here. 
    lblEmail.Text = ds.Tables[0].Rows[0]["Email"].ToString();
    lblName.Text = ds.Tables[0].Rows[0]["Fullname"].ToString();
    lblContact.Text = ds.Tables[0].Rows[0]["Contactnumber"].ToString();
    lblPassword.Text = ds.Tables[0].Rows[0]["Password"].ToString();
}

我不明白这个错误。错误是位置 0 处没有行。

标签: c#asp.net

解决方案


位置 0 没有行- 这意味着您的结果集为空,您需要在访问任何行之前检查计数。

if (ds.Tables == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) {
    // Throw the error or retrun the code 
}

笔记:

  • 每次从 Session 获取值之前都需要处理 null。您可以为此创建一个自定义类来处理所有会话。请参阅此链接以获取自定义类
  • 在从行中获取值之前还需要处理 NULL。像使用下面的方法

    public static T GetValueFromDataRow<T>(this DataRow row, string columnName)
    {
         if (row.Table.Columns.Contains(columnName) && (object)row[columnName] != DBNull.Value)
         {
            return (T)row[columnName];
         }
         return default;
    }
    

推荐阅读