数据库错误:位置0没有行

本文关键字:位置 错误 数据库 | 更新日期: 2023-09-27 18:11:41

我相信几个月前有人问过这个问题,但我相信我的情况不同,同样的规则可能不适用。

每次执行这个方法时,都会弹出相同的错误。在位置0没有行。如果我把[0]改成[1]或[15];在[1]等处没有行。这是否意味着我的数据库甚至没有连接?我应该写一些if语句来检查行是否存在吗?

    public bool UpdateOrderToShipped(string order)
{
    orderNumber = order;
    string batch = ConfigurationManager.AppSettings["SuccessfulOrderBatch"];
    string statement = "UPDATE SOP10100 SET BACHNUMB = '"+ batch +"' WHERE SOPNUMBE = @SOPNUMBE";
    SqlCommand comm = new SqlCommand(statement, connectionPCI);
    comm.Parameters.Add("SOPNUMBE", orderNumber);
    try
    {
        comm.Connection.Open();
        comm.ExecuteNonQuery();
        comm.Connection.Close();
    }
    catch(Exception e)
    {
        comm.Connection.Close();
        KaplanFTP.errorMsg = "Database error: " + e.Message;
    }
    statement = "SELECT SOPTYPE FROM SOP10100 WHERE SOPNUMBE = @SOPNUMBE";
    comm.CommandText = statement;
    SqlDataAdapter da = new SqlDataAdapter(comm);
    DataTable dt = new DataTable();
    da.Fill(dt);
    soptype = dt.Rows[0]["SOPTYPE"].ToString();    //errror here
    return true;
}

数据库错误:位置0没有行

这很简单…这意味着您的查询没有返回任何结果。您总是需要进行防御性编码,并在尝试对Rows数组进行索引之前检查Rows数组中是否有任何项。比如:

if (dt.Rows.Count > 0)
    soptype = dt.Rows[0]["SOPTYPE"].ToString();
else
    somethingWentWrong();

您可能在表中有数据,但我认为连接在第一次查询后关闭。尝试再次打开连接。另外,在第一个SQL查询中有字符串连接,这不是一个好的做法。试着用block代替Try ..Catch,只是为了更好的代码。正如Joel建议的那样,使用check

for (int i = 0; i <= dt.rows.count; i++)
{
    // do something till rows in DT
}

我遇到了同样的问题,然后我意识到我的第一列不是基于整数的。所以当我编辑第一个时,我遇到了同样的错误。

所以,我的建议是要么不编辑第一列,要么让第一列成为ID列,在这种情况下,你不必编辑任何东西