請指導我如何解決此問題。數據存在,但我的程序說「沒有數據存在行/列」
if (Convert.ToInt32(rd["B_Quan"].ToString()) > 3)
{
MessageBox.Show("Oops sobra tama na ");
}
cn.Close();
請指導我如何解決此問題。數據存在,但我的程序說「沒有數據存在行/列」
if (Convert.ToInt32(rd["B_Quan"].ToString()) > 3)
{
MessageBox.Show("Oops sobra tama na ");
}
cn.Close();
行/列或者不存在或者包含null。 在這種情況下,您會收到NullReferenceException
因爲null
不具備的功能.ToString()
你可以檢查此:
if (rd.Table.Columns.Contains("B_Quan") && rd["B_Quan"] != null)
{
if (Convert.ToInt32(rd["B_Quan"].ToString()) > 3)
{
MessageBox.Show("Oops sobra tama na ");
}
}
cn.Close();
這是什麼呢?
using (DataTable dt = new DataTable())
{
dt.Load(rd);
Console.WriteLine(dt.Rows.Count);
}
if (Convert.ToInt32(rd["B_Quan"].ToString()) > 3)
{
MessageBox.Show("Oops sobra tama na ");
}
在調試時,你能打開dt
並查看你的表嗎?如果有一個名爲「B_Quan」的列?
這個條件將是無用的,因爲我確信'rd ['B_Quan']'將返回null ,直到執行'SqlDataReader.Read()' –
在Leonel指出有編輯歷史記錄之前,代碼中沒有'SqlDataReader'你做到了。你試過了嗎?因爲如果你確信它將是空的,那麼'&& rd [「B_Quan」]!= null'將會捕捉到。 – DerpyNerd
我保證,因爲不執行'SqlDataReader.Read()'rd [「B_Quan」]將不會檢索任何數據,並且它將毫無意義,因爲即使有數據,也不能在列中獲取任何數據在它裏面......我希望我能嘗試它。 –
我不知道你爲什麼在你的問題中刪除你的代碼的原因。
爲了解決這個問題,我從編輯歷史中複製了你的代碼。
我認爲,之所以會出現「不存在數據」在你的代碼是因爲你不使用SqlDataReader.Read()
呢。有關更多信息,請參閱SqlDataReader Class。
樣品:
while(rd.Read()) // You need to read first to get your data.
{
if (Convert.ToInt32(rd["B_Quan"].ToString()) > 3)
{
MessageBox.Show("Oops sobra tama na ");
}
}
您代碼:
private void button3_Click(object sender, EventArgs e)
{
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
string student = "Select * From tbl_student";
OleDbCommand loadstudent = new OleDbCommand(student, cn);
loadstudent.Parameters.AddWithValue("@SId", textBox8.Text + "%");
rd = loadstudent.ExecuteReader();
if (rd.HasRows == true)
{
// ipapalabas ung labas
while (rd.Read())
{
messageBox.Show("Oops sobra tama na ");
}
}
else
{
MessageBox.Show("No record(s) found.");
}
cn.Close();
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
string s = "Select * From Borrow";
OleDbCommand sa = new OleDbCommand(s, cn);
loadstudent.Parameters.AddWithValue("@SId", textBox8.Text + "%");
rd = sa.ExecuteReader();
while(rd.Read()) // You need to read first to get your data.
{
if (Convert.ToInt32(rd["B_Quan"].ToString()) > 3)
{
MessageBox.Show("Oops sobra tama na ");
}
}
cn.Close();
if (cn.State == ConnectionState.Closed) cn.Open();
cmd = new OleDbCommand("Select * From Borrow", cn);
rd = cmd.ExecuteReader();// ipapalitaw
if (rd.HasRows == true)
{
// ipapalabas ung labas
while (rd.Read())
{
if (Convert.ToInt32(rd["B_Quan"].ToString()) > 3)
{
MessageBox.Show("Oops sobra tama na ");
return;
}
}
}
}
對不起,先生。感謝您的幫助@LeonelSarmiento – Bajongjong
有什麼錯誤? –
請閱讀[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask) – 3615
你已經提供了很多代碼,並沒有說明究竟發生了什麼,你在做什麼預計會發生,或者迄今爲止經歷了什麼診斷。請閱讀https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ –