繁体   English   中英

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

[英]Database Error: There is no row at position 0

我相信这个问题是在几个月前被问到的,但我相信我的情况有所不同,同样的规则也许不适用。

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

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

if (dt.Rows.Count > 0)
    soptype = dt.Rows[0]["SOPTYPE"].ToString();
else
    somethingWentWrong();
for (int i = 0; i <= dt.rows.count; i++) { // do something till rows in DT }

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM