IsDBNull和IsNullOrEmpty的区别

本文介绍在ASP.NET中如何正确处理从数据库读取的NULL值,包括使用IF判断语句进行检查的方法,并对比了NULL、、DBNull、String.Empty及Convert.IsDBNull的区别。
有時候,資料庫的某一個欄位,裡面是「Null」值的時候,ASP.NET無法把這樣的 Null值,呈現在畫面上。因為ASP.NET不會自動把Null值轉換成一般的字串(String),因此會出現錯誤訊息。……關於Null的定義,請參考資料庫的相關書籍。

例如:資料庫裡面,有個欄位test123的值剛剛好是「Null」。
那麼,我們想要把這個欄位呈現在網頁上,下面這行程式碼一定會出錯!
<%  Response.Write( dr.Item(“test123”) )  %>
為了避免這種例外錯誤的產生,在後置程式碼(Code Behind)裡面,我們必須要一個IF判別式來防堵:

IF   Not   dr.Item(“test123”)   Is DBNull.Value   Then
      ‘--註解:如果 test123欄位的值,不是「Null」的話,才會執行這區。
       Response.Write(dr.Item(“test123”))
End IF

如果是用資料繫結運算式,寫在HTML裡面(.aspx檔),請用下列作法:
Convert.IsDBNull(Eval("column"))

或是

Eval("Column").Equals(System.Data.DbNull)
資料來源: http://tw.knowledge.yahoo.com/question/question?qid=1508091105980

摘錄:   資料庫的 NULL 值是一個標記 ,標示說資料庫目前這個欄位是空的,它的本質和空字串也不同,所以用 string.IsNullOrEmpty(myField.Value) 是無法判斷它是否為 NULL 值的,這也就是為什麼 DataRow 要提供一個 IsNull() 方法,而 DataReader 要多一個 IsDBNull() 的方法,就是因為 NULL 值的獨特性。
[秋风:以上资料来源微软高级MVP]
------------------------------------------------------------------------------------
C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别

最佳答案
null是C#关键字,是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。DBNULL表示类,表示空值.该类用于指示不存在某个已知值(通常在数据库应用程序中)。在数据库应用程序中,空对象是字段的有效值。该类区分空值(空对象)和未初始化值(DBNull.Value 实例)。例如,表可以包含具有未初始化字段的记录。默认情况下,这些未初始化字段具有 DBNull 值。String.Empty表示空字符串,该属性为只读.Convert.IsDBNULL(object value)是一个方法,就是判断参数对象是否为DBNULL对象类型,如果是返回true,不是返回false
null可赋值任何变量,将变量置为空DBNull只用于DataRow对象,表示数据库中的空值String.Empty是0长度字串Convert.IsDBNull判断是否为DBNull

转载于:https://www.cnblogs.com/silverLee/archive/2009/11/05/1596822.html

private void bt_import_rd_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(textEdit_rd_actual.Text) && !string.IsNullOrEmpty(textEdit_rd_2.Text)) { this.Cursor = Cursors.WaitCursor; //读取编辑好的更新文档 DataTable dt_actual = IoHelper.LoadExcelToDataTable(textEdit_rd_actual.Text); DataTable dt_type = IoHelper.LoadExcelToDataTable(textEdit_rd_2.Text); if (!Convert.IsDBNull(dt_actual) && !Convert.IsDBNull(dt_type)) { Boolean flag = false; for (int i = 0; i < dt_type.Columns.Count; i++) { if (dt_type.Columns[i].ColumnName == "Lot Type") { flag = true; break; } } if (flag) { ImportData(dt_actual, dt_type); } else { DevExpress.XtraEditors.XtraMessageBox.Show("传输数据不存在Lottype列 请Check!"); } } else { DevExpress.XtraEditors.XtraMessageBox.Show("传输数据为空 请Check!"); } this.Cursor = Cursors.Default; } else { DevExpress.XtraEditors.XtraMessageBox.Show("传输数据为空 请Check!"); } } private void ImportData(DataTable dt_actual, DataTable dt_type) { DataView dv = new DataView(dt_actual); DataTable dt_mon = dv.ToTable(true, "YEAR", "MONTH"); dt_mon.DefaultView.RowFilter = "year IS NOT NULL AND month IS NOT NULL"; dt_mon = dt_mon.DefaultView.ToTable(); string monthlist = ""; for (int i = 0; i < dt_mon.Rows.Count; i++) { monthlist += "'" + Convert.ToString(dt_mon.Rows[i]["YEAR"]) + Convert.ToString(dt_mon.Rows[i]["MONTH"]) + "',"; } monthlist = monthlist.Length == 0 ? monthlist : monthlist.Substring(0, monthlist.Length - 1); //删除所传数据月份数据 string sql_del = @" DELETE FROM icost_rd_detail WHERE idate IN(" + monthlist + @") "; DataTool.ExecuteSql(sql_del); DataTable dt_detail = new DataTable(); dt_detail.Columns.Add("COMPANY", typeof(string)); dt_detail.Columns.Add("ACCOUNT", typeof(string)); dt_detail.Columns.Add("DESCRIPTION", typeof(string)); dt_detail.Columns.Add("YEAR", typeof(string)); dt_detail.Columns.Add("MONTH", typeof(string)); dt_detail.Columns.Add("FAB", typeof(string)); dt_detail.Columns.Add("MOTHER_FAB", typeof(string)); dt_detail.Columns.Add("SUB_LOCATION", typeof(string)); dt_detail.Columns.Add("TRANSTYPE", typeof(string)); dt_detail.Columns.Add("COST_CENTER", typeof(string)); dt_detail.Columns.Add("PRODUCT_ID", typeof(string)); dt_detail.Columns.Add("LOTID", typeof(string)); dt_detail.Columns.Add("QTY", typeof(double)); dt_detail.Columns.Add("UNIT", typeof(string)); dt_detail.Columns.Add("PO_NO", typeof(string)); dt_detail.Columns.Add("PROJECT_CODE", typeof(string)); dt_detail.Columns.Add("ITEM_TEXT", typeof(string)); dt_detail.Columns.Add("AMOUNT", typeof(double)); dt_detail.Columns.Add("LOTTYPE", typeof(string)); dt_detail.Columns.Add("IDATE", typeof(string)); dt_detail.Columns.Add("SEQ", typeof(string)); int a = 0; foreach (DataRow dr in dt_actual.Rows) { if (!Convert.IsDBNull(dr[17])) { a++; dt_detail.Rows.Add(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5], dr[6], dr[7], dr[8], dr[9], dr[10], dr[11], dr[12], dr[13], dr[14], dr[15], dr[16], dr[17], "", Convert.ToString(dr[3]) + Convert.ToString(dr[4]), a); } } dt_detail.DefaultView.RowFilter = "idate IS NOT NULL"; dt_detail = dt_detail.DefaultView.ToTable(); //删除已导入数据 string sql = @" truncate table icost_rd_detail_temp"; DataTool.ExecuteSql(sql); DataTable dt_temp = new DataTable(); dt_temp.Columns.Add("YEAR", typeof(string)); dt_temp.Columns.Add("MONTH", typeof(string)); dt_temp.Columns.Add("FAB", typeof(string)); dt_temp.Columns.Add("LOTTYPE", typeof(string)); dt_temp.Columns.Add("PRODUCT_ID", typeof(string)); dt_temp.Columns.Add("PROCESS", typeof(string)); dt_temp.Columns.Add("LOTID", typeof(string)); dt_temp.Columns.Add("QTY", typeof(double)); dt_temp.Columns.Add("AMOUNT", typeof(double)); dt_temp.Columns.Add("IDATE", typeof(string)); foreach (DataRow dr in dt_type.Rows) { if (!Convert.IsDBNull(dr[18]) && !Convert.IsDBNull(dr[10])) { dt_temp.Rows.Add(dr[0], dr[1], dr[2], dr[8], dr[9], dr[11], dr[10], dr[12], dr[18], Convert.ToString(dr[0]) + Convert.ToString(dr[1])); } } dt_temp.DefaultView.RowFilter = "idate IS NOT NULL"; dt_temp = dt_temp.DefaultView.ToTable(); int j = 0; if (dt_detail != null && dt_temp != null) { j = DataTool.BulkInsert("icost_rd_detail", dt_detail); j = j + DataTool.BulkInsert("icost_rd_detail_temp", dt_temp); } if (j >= 2) { DataTool.ExecuteProcedure("icost_prc_rd_update"); ccb_date_rd.Text = ""; dt_from_rd.Text = ""; dt_to_rd.Text = ""; SelectFilter_Load_RD(); DevExpress.XtraEditors.XtraMessageBox.Show("RD相关数据保存成功"); } else { DevExpress.XtraEditors.XtraMessageBox.Show("RD相关数据保存失败!请联系开发人员"); } } 解释代码
最新发布
08-29
StringBuilder sql = new StringBuilder(); sql.Clear(); sql.Append(@"SELECT V.CSI_ID, V.CSI_NUMBER, V.STATUS AS STATUS, XXCT_WMS_UTIL_TUNED_PKG.GET_CSI_EBS_STATUS(CSI_ID, V.SHIP_CONFIRM_DATE) AS EBS_STATUS, XXCT_WMS_UTIL_TUNED_PKG.GET_BPM_PROCESS(CSI_ID, V.SHIP_CONFIRM_DATE) AS BPM_STATUS, XXCT_WMS_UTIL_TUNED_PKG.GET_ALL_CONFIRMED(CSI_ID, V.SHIP_CONFIRM_DATE) AS IS_ALL_CONFIRMED, (CASE WHEN XXCT_CONSO_SHIPPING_PKG.IS_SHIP_CONFIRM(CSI_ID) = 0 THEN 'Yes' ELSE 'No' END) AS SHIP_CONFIRM, V.SHIP_CONFIRM_DATE, DECODE(V.IS_FROZEN, '0', 'Yes', 'No') AS IS_FROZEN, XXCT_WMS_PACK_LOCALIZATION_PKG.IS_DOMESTIC_TYPE(CSI_ID) AS ORDER_TYPE, V.BILL_REFERENCE, (SELECT OU.SHORT_CODE FROM XXCT_HR_OPERATING_UNITS OU WHERE OU.ORGANIZATION_ID = NVL(V.OPERATING_UNIT, 0) AND ROWNUM = 1) AS OU_TEXT, (SELECT IO.ORGANIZATION_CODE FROM INV_ORGANIZATION_INFO_V IO WHERE IO.ORGANIZATION_ID = NVL(V.ORGANIZATION_ID, 0) AND ROWNUM = 1) AS IO_TEXT, V.CURRENCY_CODE, V.INVOICE_ISSUED_DATE FROM XXCT_CSI_HEADER_TVIEW V LEFT JOIN XXCT_WMS_SHIP_METHOD_VIEW SM ON SM.ORGANIZATION_ID = V.ORGANIZATION_ID AND SM.SHIP_METHOD_CODE = V.SHIP_METHOD_CODE "); #region Where SQL Statment if (!string.IsNullOrEmpty(tbCSINum.Text)) { sql.Append(@" (:CSI_NUMBER is NULL OR V.CSI_NUMBER LIKE UPPER(:CSI_NUMBER)) AND "); } if (!string.IsNullOrEmpty(cbOu.SelectedValue)) { sql.Append(@" (:OU is NULL OR V.OPERATING_UNIT = :OU) AND "); } if (!string.IsNullOrEmpty(cbIo.SelectedValue)) { sql.Append(@" (:IO is NULL OR V.ORGANIZATION_ID = :IO) AND "); } sql.Append(@" V.CSI_ID IS NOT NULL "); sql.Append(@" ORDER BY CSI_ID DESC "); #endregion #region Parameters List<OracleParameter> parameters = new List<OracleParameter>(); parameters.Add(new OracleParameter("CSI_NUMBER", tbCSINum.Text)); parameters.Add(new OracleParameter("OU", cbOu.SelectedValue)); parameters.Add(new OracleParameter("IO", cbIo.SelectedValue)); #endregion DataSet dataSet = dbHelper.GetDataSet(sql.ToString(), parameters.ToArray()); 帮我把 dataSet 转 成XxctPatchShipConfirmCsiLog
03-12
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Say { public partial class SayManage : Form { // 实例字段(非静态) public int Pid; public string Pname; public string Stype; public string Savedate; public string Content; public byte[] ImageData; public SayManage() { InitializeComponent(); } private void LoadPoint() { dgv.Rows.Clear(); using (Dao4 dao = new Dao4()) { dao.Connect(); string sql = "SELECT * FROM T_Say"; using (SqlDataReader reader = dao.Read(sql)) { while (reader.Read()) { // 处理图片数据 byte[] imageData = null; if (!reader.IsDBNull(5)) // 假设Image是第6列 { imageData = (byte[])reader[5]; } dgv.Rows.Add( reader[0].ToString(), reader[1].ToString(), reader[2].ToString(), reader[3].ToString(), reader[4].ToString(), imageData != null ? "有图片" : "无图片" ); } } } } private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex < 0 || dgv.Rows[e.RowIndex].Cells[0].Value == null) return; DataGridViewRow row = dgv.Rows[e.RowIndex]; // 获取选中行的数据 lbid.Text = row.Cells[0].Value.ToString(); lbName.Text = row.Cells[1].Value.ToString(); // 更新类字段(去掉static关键字) Pid = int.Parse(row.Cells[0].Value.ToString()); Pname = row.Cells[1].Value.ToString(); Stype = row.Cells[2].Value.ToString(); Savedate = row.Cells[3].Value.ToString(); Content = row.Cells[4].Value.ToString(); // 获取图片数据(从数据库重新获取) using (Dao4 dao = new Dao4()) { dao.Connect(); string sql = $"SELECT Image FROM T_Say WHERE Pid={Pid}"; using (SqlDataReader reader = dao.Read(sql)) { if (reader.Read() && !reader.IsDBNull(0)) { ImageData = (byte[])reader[0]; } else { ImageData = null; } } } } //进行关键字搜索查询 private void btnSearch_Click(object sender, EventArgs e) { //拿到关键字 string key = txtKey.Text.Trim(); //以关键字进行模糊查询 Dao4 dao = new Dao4(); dao.Connect(); string sql = $"select * from T_Say where Pname like '%{key}%'or Stype like '%{key}%'"; SqlDataReader reader = dao.Read(sql); //清空表格 dgv.Rows.Clear(); //结果显示到表格控件中 while (reader.Read()) { dgv.Rows.Add(reader[0].ToString(), reader[1].ToString(), reader[2].ToString(), reader[3].ToString(), reader[4].ToString(), reader[5].ToString()); } reader.Close(); dao.Close(); } private void button5_Click(object sender, EventArgs e) { if (lbName.Text == "NULL") { MessageBox.Show("未选中知识点!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // 确保 lbid 是正确的知识点编号 if (string.IsNullOrEmpty(lbid.Text) || lbid.Text == "NULL") { MessageBox.Show("知识点编号无效!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // 获取知识点的编号 int pointId; if (!int.TryParse(lbid.Text, out pointId)) { MessageBox.Show("知识点编号格式错误!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } Dao4 dao = new Dao4(); dao.Connect(); try { string sql = "SELECT [Content] FROM T_Point WHERE Pid = @Pid"; // 使用dao.Connection替代未定义的_connection using (SqlCommand cmd = new SqlCommand(sql, dao.Connection)) // 关键修改点 { cmd.Parameters.AddWithValue("@Pid", pointId); object result = cmd.ExecuteScalar(); if (result != null) { string introduce = result.ToString(); MessageBox.Show(introduce, $"{lbName.Text}的简介", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("未找到该知识点的简介!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } catch (SqlException ex) { MessageBox.Show($"获取简介时发生错误:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { dao.Close(); } } private void SayManage_Load(object sender, EventArgs e) { LoadPoint(); // 加载知识点数据 lbid.Text = "NULL"; lbName.Text = "NULL"; // 初始化标签 } } } 报错:Dao4未包含Connect
07-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值