数据库错误:位置 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 中的意外标记