it-swarm-id.com

Kesalahan Database: Tidak ada baris pada posisi

Saya percaya pertanyaan ini ditanyakan beberapa bulan yang lalu, tetapi saya percaya situasi saya berbeda dan aturan yang sama mungkin tidak berlaku. 

Setiap kali saya menjalankan metode ini, muncul kesalahan yang sama. Tidak ada baris di posisi 0. Jika saya mengubah [0] ke [1] atau [15]; Tidak ada baris pada [1] dan lainnya. Mungkinkah ini berarti bahwa basis data saya bahkan tidak terhubung? Haruskah saya menulis semacam pernyataan if untuk memastikan apakah barisnya ada di sana? 

    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

Ini sangat sederhana ... itu berarti tidak ada hasil yang dikembalikan dari permintaan Anda. Anda selalu harus kode pertahanan dan memeriksa untuk melihat apakah array Baris memiliki item di dalamnya sebelum mencoba untuk mengindeks ke dalamnya. Sesuatu seperti:

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

anda mungkin memiliki data di tabel tetapi saya pikir koneksi ditutup setelah permintaan pertama. coba buka koneksi lagi. Anda juga memiliki rangkaian string dalam query SQL pertama, yang bukan praktik yang baik. coba gunakan blok alih-alih coba .. tangkap, hanya untuk kode yang lebih baik. Dan seperti yang disarankan Joel, gunakan cek

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

Saya mengalami masalah yang sama, kemudian saya menyadari bahwa kolom pertama saya tidak berbasis integer. Jadi, ketika saya mengedit yang pertama saya menghadapi kesalahan yang sama.

Jadi, saran saya adalah jangan mengedit kolom pertama atau menjadikan kolom pertama sebagai kolom ID sehingga Anda tidak perlu mengedit apa pun.

0
Muhammad Suleman