比如用户注册,有一些东西是可选的,如QQ号码等,我用了这样的写法,可是不行,会说QQ不能为空,前台我用的是 detailsview空间+ObjectDataSource,改怎么解决呢?或是用其他什么办法,只要能解决就行啊!!!谢了!!!!!!<asp:ObjectDataSource ID="ObjectDataSource3" runat="server"
            InsertMethod="AAddDetails" ………… public int AddDetails(details details1)
    {
        SqlParameter[] myPara = new SqlParameter[2];
        myPara[0] = new SqlParameter("@name", SqlDbType.VarChar);
        myPara[0].Value = details1.Name;        if ((details1.QQ.ToString())==null)
        {
            myPara[1] = new SqlParameter("@QQ", SqlDbType.VarChar);
            myPara[1].Value = "无";
        }
        else
        {
            myPara[3] = new SqlParameter("@body", SqlDbType.VarChar);
            myPara[3].Value = details1.Body;
        }
        ………………
        return SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_UPDATE_CLASS3, myPara);    }

解决方案 »

  1.   

    把详细错误提示贴出来看看一般来说会这样写        if (string.IsNullAndEmtry(details1.QQ))
            {
                myPara[1] = new SqlParameter("@QQ", SqlDbType.VarChar);
                myPara[1].Value = DBNull.Value;//数据库中为null值
            }
            else
            {
                myPara[1] = new SqlParameter("@QQ", SqlDbType.VarChar);
                myPara[1].Value = details1.QQ;
             }
      

  2.   

    首先这条写的应该有问题:if ((details1.QQ.ToString())==null)
    改成
    if ((details1.QQ.ToString())==String.Empty)试试
      

  3.   

    myPara[1] = new SqlParameter("@QQ", SqlDbType.VarChar);
    myPara[1].Value = string.IsNullOrEmpty(details1.QQ) ? DBNull.Value : details1.QQ;
      

  4.   

    不要和null判断判断是否是空串,或者判断是否为string.Empty
      

  5.   

    string.IsNullAndEmtry(details1.QQ   
    myPara[1].Value = string.IsNullOrEmpty(details1.QQ) ? DBNull.Value : details1.QQ;数据库字段设置了可以为空 ,主要是insert into user方法中有这个QQ字段,我想用户不写QQ记录时,也能插入到数据库,或者用其他的方法也行啊,只要能解决这个问题。
    这样些也不行的
      

  6.   

    存放null在数据库里, 程序上可能经常出错, 从数据库效率上来说也会降低.建议, 能不为null的,尽量不要允许null, 然后赋默认值.进行数据格式化.
    比如 qq varchar(20) not null default ''
      

  7.   

    支持2楼的用法。我有一个表有50个字段。除开始几个字段要填写以外,其他的都可以存<Null>。调用存储过程时,就2楼的写法。
    问楼上fcuandy ,为什么存null会影响到数据库效率呢。如果表有40个字段存放0(默认值)的字段跟这40个字段存放null(默认值)比较:数据库的效率和占用空间。那个比较好一点呢。
      

  8.   

    Only if the index row has nullable columns are the field called Ncol and the null bitmap both present. The Ncol field contains a value indicating how many columns are in the index row; this value is needed to determine how many bits are in the null bitmap. Data rows have an Ncol field and null bitmap whether or not any columns allow NULL, but index rows have only a null bitmap and an Ncol field if any NULLs are allowed in an index column
    ------------------------------------------------主要是对索引的影响, 为null时无法建索引,或者说都是null, 无法利用.另外,null,并非什么都不存在的, sqlserver采用特殊的字符位来标记null,所以在查询时需要额外的消耗.具体参见 sqlserver技术内幕-存储引擎.
      

  9.   

    知道了。谢谢楼上的了。新手来的。不见怪。对技术不了解就乱问人家。呵呵。
    继续问楼上的。
    如果字段有default值,那么在调用insert或update的存储过程时(已经设置好默认值)时,如何控制用户录入的数据与存储过程的参数对于起来。就是一个字段,用户有录入数据,就在调查存储过程时加进参数,没有否则用default值。
    比如insert 语句的sql参数
    @aa int=0,
    @bb int=1,
    @cc int=0
    用户只有录入aa的数据。那么bb,cc怎么处理。VB.Net或C#。在调用存储过程事时,是不是放空,不把bb cc只两个参数添加到command里面呢,系统就会自己引用default值呢。
      

  10.   

    欢迎到LeadNT.Org讨论asp.net问题 :)
      

  11.   

    DBNull.Value可在数据库插入空记录