[英]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.