C#中DBNull问题

当数据库中一个字段不是必填项时,在往数据库中插入数据的时候往往会插入一个空字符串就草草了事了。在这里用DBNull可以解决这个问题

/// <summary>
        /// 插入数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, RoutedEventArgs e)
        {
            string name = txtName.Text;
            string age = txtAge.Text;
            string height = txtHeight.Text;
            object objName;
            if (name.Length <= 0)
            {
                objName = DBNull.Value;
            }
            else
            {
                objName = name;
            }
            object objAge;
            if (age.Length <= 0)
            {
                objAge = DBNull.Value;
            }
            else
            {
                objAge = age;
            }
            object objHeight;
            if (height.Length <= 0)
            {
                objHeight = DBNull.Value;
            }
            else
            {
                objHeight = height;
            }
            SqlHelper.ExecuteNonQuery(@"insert into T_Person(Name,Age,Height) values (@Name,@Age,@Height)",
                new SqlParameter("@Name", objName),
                new SqlParameter("@Age", objAge),
                new SqlParameter("@Height", objHeight));
        }
        /// <summary>
        /// 读出数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, RoutedEventArgs e)
        {
            DataSet ds = SqlHelper.ExecuteDataSet("select * from T_Person where id=2");

            string name;
            if (ds.Tables[0].Rows[0]["Name"] == DBNull.Value)
            {
                name = null;
            }
            else
            {
                name = ds.Tables[0].Rows[0]["Name"].ToString();
            }
            int? age;
            if (ds.Tables[0].Rows[0]["Age"] == DBNull.Value)
            {
                age = null;
            }
            else
            {
                age = int.Parse(ds.Tables[0].Rows[0]["Age"].ToString());
            }
            txtName.Text = name;
            txtAge.Text = age.ToString();
            txtHeight.Text=ds.Tables[0].Rows[0]["Height"].ToString();
        }

时间: 2024-10-13 22:45:04

C#中DBNull问题的相关文章

C# 读取Excel中的数据

#region 读取Excel中的数据 /// <summary> /// 读取Excel中的数据 /// </summary> /// <param name="excelFile">Excel文件名及路径,EG:C:\Users\JK\Desktop\导入测试.xls</param> /// <returns>Excel中的数据</returns> private DataTable GetTable(stri

C# DataRow 比较

/// <summary> /// dataRow比较 /// </summary> /// <param name="drA"></param> /// <param name="drB"></param> /// <param name="columnNames">需要比较的列</param> /// <returns></ret

MVP MVVM MVC

上一篇得到大家的关注,非常感谢.由于自己对于这些模式的理解也是有限,对于MVC,MVP,MVVM这些模式的比较,是结合自己的理解,一些地方不一定准确,需要的朋友可以参考下 上一篇得到大家的关注,非常感谢.由于自己对于这些模式的理解也是有限,对于这些模式的比较,是结合自己的理解,一些地方不一定准确,但是只有亮出自己的观点,才能抛砖引玉不是? 欢迎各位拍砖.:) 复制代码 代码如下: 阅读目录: 四. MVP模式 4.1 MVP的思想 4.2 UI界面接口化 4.3 Presenter —— Mod

EF连接Mysql 表&#39;TableDetails&#39;中的列&#39;IsPrimaryKey&#39;的值为DBNull

无法生成模型,因为存在以下异常:'System.Data.StrongTypingException:表'TableDetails'中的列'IsPrimaryKey'的值为DBNull.---> System.InvalidCastException:指定的转换无效. 原文链接http://stackoverflow.com/questions/33575109/mysql-entity-the-value-for-column-isprimarykey-in-table-tabledetail

Oracle中Integer类型/DBNull的处理方法

1. 以前我一直以为 integer=number(38,0) --38是number的最大精度 integer 是个超大的数据类型,最大可以表示为power(10,126)-1 因为一个字节最大表示256,那么N个字节最大表示power(256,n)>=power(10,126) n=53,一个integer类型最少使用53个字节. 所以Integer类型还是尽量少用,一般很少用到这么大的数字.特别是某些人对于boolean类型的处理: 因为Oracle的表结构中没有布尔类型,所以很多人干脆用

C#中NULL,&quot;&quot;,DBNULL,String.Empty,Convert.IsDBNull()的区别

C#中的空值的判断较麻烦,不象在VB6中那么简单,这些各种空值的判断和理解对不熟悉的人来说,可能很麻烦,现就我在使用过程中的一点体会和大家共同分享. (1)NULL null 关键字是表示不引用任何对象的空引用的文字值.null 是引用类型变量的默认值.那么也只有引用型的变量可以为NULL,如果 int i=null,的话,是不可以的,因为Int是值类型的. (2)DBNULL DBNull在DotNet是单独的一个类型,该类只能存在唯一的实例,DBNULL.Value,DBNull唯一作用是

C#中关于DBNULL的处理方法

从数据库中获取数据有些会是空值的,这时一不注意就会被坑了-- ? 1 2 String.Concat(db.可能为DBNULL的值) 在这种情况下,如果是DBNULL,得到的会是"" C#中关于DBNULL的处理方法,布布扣,bubuko.com

“TableDetails”中列“IsPrimaryKey”的值为DBNull.

Entity Framework连接MySQL时:由于出现以下异常,无法生成模型:“表“TableDetails”中列“IsPrimaryKey”的值为DBNull. 解决方案: Execute the following commands in MySQL. use <<database name>>; set global optimizer_switch='derived_merge=OFF'; http://stackoverflow.com/questions/33575

EF6添加mysql的edmx实体时报错:无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull

EF6.1.3 ,使用mysql5.7的实体数据模型时,提示: 由于出现以下异常,无法生成模型:"System.Data.StrongTypingException: 表"TableDetails"中列"IsPrimaryKey"的值为 DBNull 网上的解决办法都是: 1. 运行services.msc,重启MySQL服务. 2. 在MySQL运行一下命令: use mydbname; set global optimizer_switch='deri