it-swarm.com.de

Datenbankfehler: An Position befindet sich keine Zeile

Ich glaube, diese Frage wurde vor einigen Monaten gestellt, aber ich glaube, dass meine Situation anders ist und die gleichen Regeln möglicherweise nicht zutreffen. 

Bei jeder Ausführung dieser Methode wird derselbe Fehler angezeigt. Es gibt keine Zeile an Position 0. Wenn ich [0] in [1] oder [15] ändere; Bei [1] und usw. gibt es keine Zeile. Könnte dies bedeuten, dass meine Datenbank nicht einmal eine Verbindung herstellt? Soll ich eine if -Anweisung schreiben, um festzustellen, ob die Zeilen überhaupt vorhanden sind? 

    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;
}
10
javasocute

Dies ist sehr einfach. Dies bedeutet, dass keine Ergebnisse von Ihrer Abfrage zurückgegeben wurden. Sie müssen immer defensiv codieren und prüfen, ob im Rows-Array Elemente enthalten sind, bevor Sie versuchen, darin zu indizieren. So etwas wie:

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

sie haben möglicherweise Daten in der Tabelle, aber ich denke, die Verbindung wird nach der ersten Abfrage geschlossen. Versuchen Sie erneut, die Verbindung zu öffnen. Außerdem haben Sie in der ersten SQL-Abfrage eine Zeichenfolgenverkettung. Dies ist keine gute Praxis. Versuchen Sie es mit block anstelle von try .. catch, nur für einen besseren Code. Und wie Joel vorschlug, verwende einen Scheck

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

Ich hatte das gleiche Problem und dann wurde mir klar, dass meine erste Kolumne nicht ganzzahlig war. Als ich den ersten Schnitt bearbeitete, war ich mit dem gleichen Fehler konfrontiert.

Mein Vorschlag ist also, entweder die erste Spalte nicht zu bearbeiten oder die erste Spalte zu einer ID-Spalte zu machen. In diesem Fall müssen Sie nichts bearbeiten.

0