1、自定义类,示例如下:
namespace xx
{
public class UniColumn
{
//构造函数
public UniColumn()
{ }
//自定义属性
public string ColumnId {get;set;}
public int StateId {get;set;}
public bool IsOpen {get;set;}
public DateTime DateCreated {get;set;}
}
}
2、如上面自定义的类,New一个实例。
UniColumn u = new UniColumn();
其中,只有u.ColumnId 的值为null,其他u.StateId,u.IsOpen,u.DateCreated都有默认值。
3、请问在New一个新的实例后,怎么可以保证所有属性的值都为Null。
这里有什么问题么?你db中对应字段允许为空不就可以了么?
那是肯定的了
@WesternWind: 那么你的insert, update又有什么问题么?
@Daniel Cai:
例如我要更新数据库中的部分字段,就有默认的int中的0, bool中FALSE等默认值影响操作。
UniColumn a = new UniColumn();
a.ColumnName = "精华图片";
bool b =UniColumnManager.UpdateColumn("1", a);
@WesternWind: 你这种思路是不好实现你的需求。
如果我没理解错的话,这个对象除了承载数据外,还会用于数据变更查询的信息携带者。但这种东西不是当某个属性为null就可以认为是排除在db操作外的,这样的判断不充分,而且有些时候会把你带坑里面去。
你要实现的功能最好能用ef这样的orm来做,其判断思路为在你变更实体时记录你变更的操作,这样可以在最后回写db时感知到。
@Daniel Cai:
好的 ,谢谢。
null也是默认值,引用类型和值类型,给你一个眼神自己去领会
这些我明白,就是根据需要,想把所有的属性的默认值都设定为Null,如何搞?
@WesternWind: 装箱啊
@~扎克伯格: 求具体实例,据说有这种操作可以,Eg: int ? i=null;
@WesternWind: 那不就得了
@~扎克伯格: 但是我有Get、Set 就不知道该怎么弄了。我一个完整的示例是这样的:
namespace Winder.XXX
{
[DataContract]
public class UniAccount
{
public UniAccount()
{
}
[DataMember]
public string AccountId {get;set;}
[DataMember]
public string TypeId {get;set;}
[DataMember]
public string StateId {get;set;}
[DataMember]
public string AccountName {get;set;}
[DataMember]
public string AccountMobile {get;set;}
[DataMember]
public string AccountEmail {get;set;}
[DataMember]
public string IdCard {get;set;}
[DataMember]
public string AccountPwd {get;set;}
[DataMember]
public bool IsActivate {get;set;}
[DataMember]
public DateTime ValidateTo {get;set;}
[DataMember]
public DateTime LastModify {get;set;}
[DataMember]
public DateTime DateCreated {get;set;}
[DataMember]
public string DeptCreated {get;set;}
[DataMember]
public string CreatedBy {get;set;}
[DataMember]
public string Memo {get;set;}
}
}
@WesternWind:
public string ColumnId {get;set;} public int? StateId {get;set;} public bool? IsOpen {get;set;} public DateTime? DateCreated {get;set;}
大兄弟,不忍直视你贴的code啊
@~扎克伯格: 多层架构,最后一层是WebAPI,只有这样才能返回正确的JSon格式呀。
@WesternWind: 额,说的不是同一个事,给你改好了,自己去试下吧
@~扎克伯格:
谢谢兄弟,这样能解决这层的问题,但是DAl层出现了问题,从数据库里读出数据返回到自定义对象会报错。
@~扎克伯格: 看来,DAL层的Insert和Update不能以UniColumn作为参数了 ,只能HashTable 做参数更靠谱了。这样才能更好的解决空值问题了。
/// <summary>
/// 添加UniColumn对象
/// </summary>
/// <param name="uniColumn">UniColumn</param>
/// <returns>bool</returns>
public bool AddUniColumn(UniColumn uniColumn)
{
}
@WesternWind: 不知道你要干嘛。。。我想问你报什么错?
@WesternWind: 你可以重新贴下代码吗?评论编辑器的右上角有个Html图标可以选择C#格式的代码插入功能
例如我要更新数据库中的部分字段,就有默认的int中的0, bool中FALSE等默认值,影响操作。
UniColumn a = new UniColumn();
a.ColumnName = "精华图片";
bool b =UniColumnManager.UpdateColumn("1", a);
@~扎克伯格:
1 1、业务对象填充实体对象公共方法 2 3 private SqlParameter[] FillUniColumnSqlParameterAllColumn2(UniColumn uniColumn) 4 { 5 try 6 { 7 8 SqlParameter[] paras = new SqlParameter[] 9 { 10 new SqlParameter("@ColumnId",(uniColumn.ColumnId==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnId), 11 new SqlParameter("@StateId",(uniColumn.StateId==null)?Convert.ToString(DBNull.Value):uniColumn.StateId), 12 new SqlParameter("@TypeId",(uniColumn.TypeId==null)?Convert.ToString(DBNull.Value):uniColumn.TypeId), 13 new SqlParameter("@SystemId",(uniColumn.SystemId==null)?Convert.ToString(DBNull.Value):uniColumn.SystemId), 14 new SqlParameter("@ColumnName",(uniColumn.ColumnName==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnName), 15 new SqlParameter("@ColumnPinyin",(uniColumn.ColumnPinyin==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnPinyin), 16 new SqlParameter("@ColumnEname",(uniColumn.ColumnEname==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnEname), 17 new SqlParameter("@ColumnDesc",(uniColumn.ColumnDesc==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnDesc), 18 new SqlParameter("@ColumnLogo",(uniColumn.ColumnLogo==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnLogo), 19 new SqlParameter("@ColumnImg",(uniColumn.ColumnImg==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnImg), 20 new SqlParameter("@ColumnBack",(uniColumn.ColumnBack==null)?Convert.ToString(DBNull.Value):uniColumn.ColumnBack), 21 new SqlParameter("@ParentId",(uniColumn.ParentId==null)?Convert.ToString(DBNull.Value):uniColumn.ParentId), 22 new SqlParameter("@OrderIndex",(uniColumn.OrderIndex==null)?Convert.ToInt32(DBNull.Value):uniColumn.OrderIndex), 23 new SqlParameter("@LastModify",(uniColumn.LastModify==null)?Convert.ToDateTime(DBNull.Value):uniColumn.LastModify), 24 new SqlParameter("@DateCreated",(uniColumn.DateCreated==null)?Convert.ToDateTime(DBNull.Value):uniColumn.DateCreated), 25 new SqlParameter("@DeptCreated",(uniColumn.DeptCreated==null)?Convert.ToString(DBNull.Value):uniColumn.DeptCreated), 26 new SqlParameter("@CreatedBy",(uniColumn.CreatedBy==null)?Convert.ToString(DBNull.Value):uniColumn.CreatedBy), 27 new SqlParameter("@Memo",(uniColumn.Memo==null)?Convert.ToString(DBNull.Value):uniColumn.Memo) 28 }; 29 30 return paras; 31 32 } 33 catch (Exception e) 34 { 35 Console.WriteLine(e.Message); 36 throw e; 37 } 38 } 39 40 2、实体对象填充业务对象公共方法 41 /// <summary> 42 /// 实体对象填充业务对象公共方法 43 /// </summary> 44 /// <param name="reader"></param> 45 /// <returns></returns> 46 private UniColumn FillUniColumnRecord(SqlDataReader reader) 47 { 48 UniColumn uniColumn = new UniColumn (); 49 50 if (reader["ColumnId"] != DBNull.Value) 51 { 52 uniColumn.ColumnId =Convert.ToString(reader["ColumnId"]); 53 } 54 if (reader["StateId"] != DBNull.Value) 55 { 56 uniColumn.StateId =Convert.ToString(reader["StateId"]); 57 } 58 if (reader["TypeId"] != DBNull.Value) 59 { 60 uniColumn.TypeId =Convert.ToString(reader["TypeId"]); 61 } 62 if (reader["SystemId"] != DBNull.Value) 63 { 64 uniColumn.SystemId =Convert.ToString(reader["SystemId"]); 65 } 66 if (reader["ColumnName"] != DBNull.Value) 67 { 68 uniColumn.ColumnName =Convert.ToString(reader["ColumnName"]); 69 } 70 if (reader["ColumnPinyin"] != DBNull.Value) 71 { 72 uniColumn.ColumnPinyin =Convert.ToString(reader["ColumnPinyin"]); 73 } 74 if (reader["ColumnEname"] != DBNull.Value) 75 { 76 uniColumn.ColumnEname =Convert.ToString(reader["ColumnEname"]); 77 } 78 if (reader["ColumnDesc"] != DBNull.Value) 79 { 80 uniColumn.ColumnDesc =Convert.ToString(reader["ColumnDesc"]); 81 } 82 if (reader["ColumnLogo"] != DBNull.Value) 83 { 84 uniColumn.ColumnLogo =Convert.ToString(reader["ColumnLogo"]); 85 } 86 if (reader["ColumnImg"] != DBNull.Value) 87 { 88 uniColumn.ColumnImg =Convert.ToString(reader["ColumnImg"]); 89 } 90 if (reader["ColumnBack"] != DBNull.Value) 91 { 92 uniColumn.ColumnBack =Convert.ToString(reader["ColumnBack"]); 93 } 94 if (reader["ParentId"] != DBNull.Value) 95 { 96 uniColumn.ParentId =Convert.ToString(reader["ParentId"]); 97 } 98 if (reader["OrderIndex"] != DBNull.Value) 99 { 100 uniColumn.OrderIndex =Convert.ToInt32(reader["OrderIndex"]); 101 } 102 if (reader["LastModify"] != DBNull.Value) 103 { 104 uniColumn.LastModify =Convert.ToDateTime(reader["LastModify"]); 105 } 106 if (reader["DateCreated"] != DBNull.Value) 107 { 108 uniColumn.DateCreated =Convert.ToDateTime(reader["DateCreated"]); 109 } 110 if (reader["DeptCreated"] != DBNull.Value) 111 { 112 uniColumn.DeptCreated =Convert.ToString(reader["DeptCreated"]); 113 } 114 if (reader["CreatedBy"] != DBNull.Value) 115 { 116 uniColumn.CreatedBy =Convert.ToString(reader["CreatedBy"]); 117 } 118 if (reader["Memo"] != DBNull.Value) 119 { 120 uniColumn.Memo =Convert.ToString(reader["Memo"]); 121 } 122 return uniColumn ; 123 } 124
int类型数据只能是数字,bool类型只能是true/fasle。保证所有属性的值都为NULL,你这是要改它们祖宗的姓啊
是的,就是想要New一个对象后。
UniColumn u = new UniColumn();
他们的默认值u.ColumnId ,u.StateId,u.IsOpen,u.DateCreated都为Null。咋弄?
@WesternWind:
要都为null,只能这样设置
值类型不可空
可空的是可空值类型.你不能给值类型赋空值,只能给可空值类型.
那这个怎么解释,Eg: int ? i=null;
@WesternWind: 他不都说了是可空值类型了么。你那里面所有普通的值类型全部改为可空的在new的时候不就全部都是null的么?
@Daniel Cai: 那该如何解决数据插入、数据更新、数据查询数据库时,以UniColumn作为参数,如何解决空值问题
//插入数据库
public bool AddUniColumn(UniColumn uniColumn)
{
}
//更新数据库
public bool UpdateUniColumn(string columnId,UniColumn uniColumn)
{
}
@WesternWind: 我猜你的需求是有修改的值才保存到数据库?