簡體   English   中英

並非所有代碼路徑在循環時都返回值

[英]Not all code paths return a value while loop

我編寫了以下代碼,用數據庫中的數據填充列表。

 public List<Transactie> FillTransacties()
    {
        try
        {
            SqlConnection connection = new SqlConnection(connectionString);
            connection.Open();

            SqlCommand cmd = new SqlCommand("SELECT transactieID, opdrachtID, medewerkerID, soort, datum, bedrag FROM Financien", connection);
            SqlDataReader transactieinformatie = cmd.ExecuteReader();

            List<Transactie> transacties = new List<Transactie>();

            while (transactieinformatie.Read())
            { 
                    string transactieID = transactieinformatie["transactieID"].ToString();
                    string opdrachtID = transactieinformatie["opdrachtID"].ToString();
                    string medewerkerID = transactieinformatie["medewerkerID"].ToString();
                    string soort = transactieinformatie["soort"].ToString();
                    string datum = transactieinformatie["datum"].ToString();
                    string bedrag = transactieinformatie["bedrag"].ToString();
                    Transactie transactie = new Transactie(transactieID, opdrachtID, medewerkerID, soort, datum, bedrag);
                    transacties.Add(transactie);
                    connection.Close();
                    return transacties;
            }
        }
        catch (InvalidCastException ICE)
        {
            MessageBox.Show("De data in de database is incorrect", ICE.Message);
            return new List<Transactie>();
        }
        catch (Exception e)
        {
            MessageBox.Show("Er is een onbekende error opgetreden.", e.Message);
            return new List<Transactie>();
        }
    }

現在我知道了問題所在,我在while循環中返回了值。 問題是,當我嘗試“返回交易”時, 在while循環之外,列表僅填充1個值。

我的問題是,如何解決該錯誤,使數據庫充滿數據庫中的每一行?

提前致謝。

-如果您對命名有疑問,請這樣做,因為它是荷蘭語。 -非常歡迎有關異常的提示,因為這對編程來說是非常新的。 -並且也歡迎有關“最佳做法”的提示。

您應該using語句重寫代碼。 一旦您的代碼完成,這些將自動清理數據讀取器,命令和連接:

using(SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT transactieID, opdrachtID, medewerkerID, soort, datum, bedrag FROM Financien", connection))
    using (SqlDataReader transactieinformatie = cmd.ExecuteReader())
    {
        List<Transactie> transacties = new List<Transactie>();
        while (transactieinformatie.Read())
        { 
                string transactieID = transactieinformatie["transactieID"].ToString();
                string opdrachtID = transactieinformatie["opdrachtID"].ToString();
                string medewerkerID = transactieinformatie["medewerkerID"].ToString();
                string soort = transactieinformatie["soort"].ToString();
                string datum = transactieinformatie["datum"].ToString();
                string bedrag = transactieinformatie["bedrag"].ToString();
                Transactie transactie = new Transactie(transactieID, opdrachtID, medewerkerID, soort, datum, bedrag);
                transacties.Add(transactie);
        }
        return transacties;
    }
}

因此,我從循環中刪除了關閉的連接(以便您可以繼續閱讀更多信息),現在返回循環外的列表。

刪除SqlCommand之后的每一行代碼(從sqldatareader開始),然后將其替換為:

DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);

現在,您將擁有一個DataTable對象,該對象代表您的數據庫數據(所有數據)。 您可以將其作為一組行進行迭代並使用數據

此后不久,您應該考慮閱讀Entity Framework教程(由Microsoft提供),並努力忽略完全從數據庫中獲取數據的這種方法(目前;當您變得更加熟練時,可以隨時重新訪問它,但這是一個很低的水平一種工作方式,不利於編寫好的,封裝良好,健壯和高效的代碼,尤其是作為新手。)

實際上,當您返回while statement ,循環已中斷,您必須考慮它並處理closing the connection 您需要對代碼進行一些更改,如下所示:

public List<Transactie> FillTransacties()
{
    try
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();

        SqlCommand cmd = new SqlCommand("SELECT transactieID, opdrachtID, medewerkerID, soort, datum, bedrag FROM Financien", connection);
        SqlDataReader transactieinformatie = cmd.ExecuteReader();

        List<Transactie> transacties = new List<Transactie>();

        while (transactieinformatie.Read())
        { 
                string transactieID = transactieinformatie["transactieID"].ToString();
                string opdrachtID = transactieinformatie["opdrachtID"].ToString();
                string medewerkerID = transactieinformatie["medewerkerID"].ToString();
                string soort = transactieinformatie["soort"].ToString();
                string datum = transactieinformatie["datum"].ToString();
                string bedrag = transactieinformatie["bedrag"].ToString();
                Transactie transactie = new Transactie(transactieID, opdrachtID, medewerkerID, soort, datum, bedrag);
                transacties.Add(transactie);  
        }
        return transacties;
    }
    catch (InvalidCastException ICE)
    {
        MessageBox.Show("De data in de database is incorrect", ICE.Message);
        return new List<Transactie>();
    }
    catch (Exception e)
    {
        MessageBox.Show("Er is een onbekende error opgetreden.", e.Message);
        return new List<Transactie>();
    }
    finally
    {
        connection.Close();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM