![](/img/trans.png)
[英]Data is Null. This method or property cannot be called on Null values error
[英]Data is Null. This method or property cannot be called on Null value (mysql to textbox)
我的朋友想將她的數據從數據庫傳輸到文本框,然后用c#傳輸到她的程序,但是出現了以下錯誤:
“數據為空。不能在空值上調用此方法或屬性。”
下面是代碼:
sql_command = new MySqlCommand("select sum(lt_min_hours) as TotalLate from tbl_late where (late_date between '" + date_start + "' and '" + date_to + "' and empid = '" + empid + "')", sql_connect);
sql_reader = sql_command.ExecuteReader();
if (sql_reader.Read())
{
textBox_tlate.Text = sql_reader.GetString("TotalLate");
}
else
{
MessageBox.Show("No Data.");
}
從文件 ;
如果沒有匹配的行,
SUM()
將返回NULL
。
但首先,您應該始終使用參數化查詢 。 這類字符串連接對SQL注入攻擊開放。
之后,您可以使用ExecuteScalar
而不是ExecuteReader
,后者僅返回一列和一行。 就您而言,這正是您想要的。
textBox_tlate.Text = sql_command.ExecuteScalar().ToString();
也可以使用using
語句自動配置您的連接和命令。
您需要先針對您的字段測試DbNull.Value,然后再將其分配給文本框
if (sql_reader.Read())
{
if(!sql_reader.IsDbNull(sql_reader.GetOrdinal("TotalLate")))
textBox_tlate.Text = sql_reader.GetString("TotalLate");
}
編輯
根據您的評論,什么都不會發生,因此WHERE條件無法檢索任何記錄,結果為NULL。
查看您的查詢,我想您的包含日期的變量將轉換為無效格式的字符串。 可以使用ToString和正確的格式字符串(即yyyy-MM-dd)解決此問題,但正確的處理方法是通過參數化查詢
sql_command = new MySqlCommand(@"select sum(lt_min_hours) as TotalLate
from tbl_late
where (late_date between @init and @end and empid = @id", sql_connect);
sql_command.Parameters.Add("@init", MySqlDbType.Date).Value = date_start;
sql_command.Parameters.Add("@end", MySqlDbType.Date).Value = date_end;
sql_command.Parameters.Add("@id", MySqlDbType.Int32).Value = empid;
sql_reader = sql_command.ExecuteReader();
假設date_start
和date_end
是DateTime變量,而empid
是整數1。 這樣,參數解析是由知道如何處理DateTime變量的MySql引擎完成的。 相反,您的代碼使用Net Framework進行的自動轉換,默認情況下,該轉換使用區域設置將日期轉換為字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.