sqltype IsDBNull

本文探讨了.NET和SQL在decimal、datetime、String三种数据类型上的兼容性问题,强调了在获取这些数据时避免数据截断的重要性。同时指出SQL中的所有数据类型可为空,而.NET中的引用类型可为空。

原文地址:http://www.cnblogs.com/qianyz/archive/2010/10/11/1848148.html


从数据库读取数据的时候一定要注意数据的类型兼容性

就.NET和SQL 来说,数据的兼容性有三个数据类型需要注意, decaimal SQL中的范围比.NET中的要大

  datetime .NET中的要比SQL中的精度高, String   .NET中和SQL中的长度不一样,因此在获取和这三

 个数据类型相关的数据的时候,一定要注意不要被数据截断。

SQL中的所有数据类型都是可空的,而.NET中只有引用类型是可空的,

SQL中的数据类型有另外有一个数据字段,有一个标志字段,如果这个字段为0,就表示这个值为NULL。

否则为非空。


private void bt_save_oh_Click(object sender, EventArgs e) { if (DialogResult.Yes == XtraMessageBox.Show("确认保存?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information)) { this.Cursor = Cursors.WaitCursor; DataTable dt = gridControl_amounttype.DataSource as DataTable; int changeRowCount = dt.GetChanges() != null ? dt.GetChanges().Rows.Count : 0; if (changeRowCount > 0) { DataTable dt1 = dt.Clone(); foreach (DataRow dr in dt.GetChanges().Rows) { if (dr.RowState == DataRowState.Deleted) { continue; } else { dt1.Rows.Add("Fab1", dr[1], dr[2], "T", Convert.IsDBNull(dr[4]) ? "F" : dr[4]); string type = dr[2].ToString().Trim(); byte[] type_byte = System.Text.Encoding.Default.GetBytes(type); string amouttype = BitConverter.ToString(type_byte).Replace("-", ""); string sql = @" UPDATE icost_oh_detail SET amounttype = utl_raw.cast_to_varchar2('" + amouttype + @"') WHERE cost_elem = '" + dr[1] + @"' "; DataTool.ExecuteSql(sql); } } int i = 0; i = DataTool.BulkMerge("icost_oh_amounttype", dt1, new string[] { "cost_elem" }); if (i > 0) { DataTool.ExecuteProcedure("icost_prc_oh_update"); DevExpress.XtraEditors.XtraMessageBox.Show("保存成功"); } else { DevExpress.XtraEditors.XtraMessageBox.Show("保存失败。请检查输入格式!"); } } else { DevExpress.XtraEditors.XtraMessageBox.Show("没有修改。无需保存!"); } this.Cursor = Cursors.Default; LoadData_Type(); iCost.initialFilter_OH(); iCost.SelectFilter_Load_OH(); iCost.tableAmount_OH(); } } 代码分析 DataTool.BulkMerge("icost_oh_amounttype", dt1, new string[] { "cost_elem" }); 的作用
最新发布
09-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值