比如用户注册,有一些东西是可选的,如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); }
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); }
{
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;
}
改成
if ((details1.QQ.ToString())==String.Empty)试试
myPara[1].Value = string.IsNullOrEmpty(details1.QQ) ? DBNull.Value : details1.QQ;
myPara[1].Value = string.IsNullOrEmpty(details1.QQ) ? DBNull.Value : details1.QQ;数据库字段设置了可以为空 ,主要是insert into user方法中有这个QQ字段,我想用户不写QQ记录时,也能插入到数据库,或者用其他的方法也行啊,只要能解决这个问题。
这样些也不行的
比如 qq varchar(20) not null default ''
问楼上fcuandy ,为什么存null会影响到数据库效率呢。如果表有40个字段存放0(默认值)的字段跟这40个字段存放null(默认值)比较:数据库的效率和占用空间。那个比较好一点呢。
------------------------------------------------主要是对索引的影响, 为null时无法建索引,或者说都是null, 无法利用.另外,null,并非什么都不存在的, sqlserver采用特殊的字符位来标记null,所以在查询时需要额外的消耗.具体参见 sqlserver技术内幕-存储引擎.
继续问楼上的。
如果字段有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值呢。