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

Posted

技术标签:

【中文标题】数据库错误:位置 0 处没有行【英文标题】:Database Error: There is no row at position 0 【发布时间】:2011-12-09 08:27:24 【问题描述】:

我相信这个问题是几个月前被问到的,但我相信我的情况不同,相同的规则可能不适用。

每次我执行此方法时都会弹出相同的错误。位置 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;

【问题讨论】:

为什么你的方法是布尔值?它只返回 true @Andre:一个明显的原因是将来 catch 将返回一个 false,以便调用者知道它是否成功。 @Chris,这在某些方法中是可以的,您希望在这些方法中发生错误。事实并非如此。 我确定这是一个非常简单的问题,但是我收到 Length 属性错误,CS1061: 'System.Data.DataRowCollection' 不包含 'length' 的定义并且没有扩展方法可以找到接受“System.Data.DataRowCollection”类型的第一个参数的“长度”(您是否缺少 using 指令或程序集引用?)我确定我可以找到答案,但以防万一有人愿意提供帮助。 @Chris 当然,这就是我问的原因。我可能是错的,OP 可能想出了一个很好的理由在这种方法中返回一个布尔值,我会从中学习。或者我可能是对的,他可能甚至没有意识到这是一个糟糕的设计,他会从中吸取教训。这就是我们在 Stack Overflow 的原因,对吧? :) 【参考方案1】:

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

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

【讨论】:

谢谢。顺便说一句,“ds.Rows.Count”是真的,而不是“Length”。【参考方案2】:

您的表中可能有数据,但我认为连接在第一次查询后关闭。尝试再次打开连接。此外,您在第一个 SQL 查询中有字符串连接,这不是一个好习惯。尝试使用 block 而不是 try.. catch,只是为了获得更好的代码。正如乔尔建议的那样,使用支票

【讨论】:

【参考方案3】:
for (int i = 0; i <= dt.rows.count; i++)

    // do something till rows in DT

【讨论】:

虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性 cmets 挤满你的代码,因为这会降低代码和解释的可读性!【参考方案4】:

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

因此,我的建议是不要编辑第一列或将第一列设为 ID 列,在这种情况下您无需编辑任何内容。

【讨论】:

以上是关于数据库错误:位置 0 处没有行的主要内容,如果未能解决你的问题,请参考以下文章

使用 FS 读取字符串返回此错误:位置 0 处 JSON 中的意外标记 r

TypeScript 错误 TS5014:位置 0 处 JSON 中的意外标记 u

PayPal Checkout 示例代码错误:位置 0 处 JSON 中的意外令牌 <

显示图像时 Object.parse 位置 0 处 JSON 中的意外标记

SyntaxError:在 Graphiql 中测试时,JSON 中位置 0 处出现意外标记 <

如何修复 SyntaxError:位置 0 处 JSON 中的意外标记 b