2023年6月21日发(作者:)

SQLServer的位运算在SQL Server ,采⽤1,2,4,等⽤数字标识的状态字段可以进⾏累加,对存在的⼏种状态进⾏组合,从⽽可形成各种组合状态例如:⼀条记录该字段原来的数字是,2,如我们想加上4,则可以⽤update t_User set iFlag = iFlag | 4 where UserID = 1(iFlag 为该字段名)例2:在加上4之后我们想去掉4怎么办呢,可以这样实现update t_User set iFlag = iFlag ^4 where UserID = 1这样就⼜把4从该记录中去掉了.如果我们想选择所有为2的记录该怎么做呢,可以这样实现select * from t_User where iFlag &2 = 2SQL中的位运算不但可以取出各种值,⽽且我们可以对他对数据进⾏排序举例如下,新闻列表中的⼀个字段标识为1:置顶2:不置顶4:推荐8:不推荐该字段的值可以为这4种状态的组合,如果我们根据⼀定条件想把所有置顶的放在前⾯该如何做呢select * from t_News order by iFlag & 1 desc这样我们就把所有置顶的贴⼦排在前⾯,当然这⾥可以加上⼀定的Where 条件,在Where ⾥也可可以加⼀定的位运算,关于位运算可以查阅相应的SQL 帮助下⾯来讲⼀讲C#中的枚举位运算这⾥我们定义⼀个枚举 [Flags] enum UserFlag { a = 1, b = 2, c = 4, d = 8, e = 16, f = 32 }在代码⾥加上如下处理 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string strSQL = "select * from v_User where iFlag & @iFlag = @iFlag"; //SqlParameter parm = new SqlParameter("@iFlag",,4); // = UserFlag.a | UserFlag.b ; SqlConnection con = new SqlConnection("server=.;database=Sinvan_TexDB;User Id=sa;pwd=123;"); SqlCommand comm = new SqlCommand(strSQL, con); ("@iFlag", , 4).Value = UserFlag.a | UserFlag.b; SqlDataAdapter adp = new SqlDataAdapter(comm); DataTable dTable = new DataTable(); (dTable); UserFlag userFlag = (UserFlag)(typeof(UserFlag), [0][11].ToString());

} }进⾏处理之后userFlag就是数据库中存在的各种组合我们同样可对其进⾏⼀定的位运算处理如我们想加上 UserFlag.c 可进⾏如下操作userFlag = userFlag | Userflag.c如想去掉UserFlag.c 可进⾏如下操作userFlag = userFlag ^ UserFlag.c如我们要判断是该标识中是否存在c可进⾏如下操作(userFlag & UserFlag.c) == UserFlag.c是不是与SQL Server 中的操作类似,位运算不管什么语⾔都是通⽤的,呵呵可惜Access 不⽀持位运算

2023年6月21日发(作者:)

SQLServer的位运算在SQL Server ,采⽤1,2,4,等⽤数字标识的状态字段可以进⾏累加,对存在的⼏种状态进⾏组合,从⽽可形成各种组合状态例如:⼀条记录该字段原来的数字是,2,如我们想加上4,则可以⽤update t_User set iFlag = iFlag | 4 where UserID = 1(iFlag 为该字段名)例2:在加上4之后我们想去掉4怎么办呢,可以这样实现update t_User set iFlag = iFlag ^4 where UserID = 1这样就⼜把4从该记录中去掉了.如果我们想选择所有为2的记录该怎么做呢,可以这样实现select * from t_User where iFlag &2 = 2SQL中的位运算不但可以取出各种值,⽽且我们可以对他对数据进⾏排序举例如下,新闻列表中的⼀个字段标识为1:置顶2:不置顶4:推荐8:不推荐该字段的值可以为这4种状态的组合,如果我们根据⼀定条件想把所有置顶的放在前⾯该如何做呢select * from t_News order by iFlag & 1 desc这样我们就把所有置顶的贴⼦排在前⾯,当然这⾥可以加上⼀定的Where 条件,在Where ⾥也可可以加⼀定的位运算,关于位运算可以查阅相应的SQL 帮助下⾯来讲⼀讲C#中的枚举位运算这⾥我们定义⼀个枚举 [Flags] enum UserFlag { a = 1, b = 2, c = 4, d = 8, e = 16, f = 32 }在代码⾥加上如下处理 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string strSQL = "select * from v_User where iFlag & @iFlag = @iFlag"; //SqlParameter parm = new SqlParameter("@iFlag",,4); // = UserFlag.a | UserFlag.b ; SqlConnection con = new SqlConnection("server=.;database=Sinvan_TexDB;User Id=sa;pwd=123;"); SqlCommand comm = new SqlCommand(strSQL, con); ("@iFlag", , 4).Value = UserFlag.a | UserFlag.b; SqlDataAdapter adp = new SqlDataAdapter(comm); DataTable dTable = new DataTable(); (dTable); UserFlag userFlag = (UserFlag)(typeof(UserFlag), [0][11].ToString());

} }进⾏处理之后userFlag就是数据库中存在的各种组合我们同样可对其进⾏⼀定的位运算处理如我们想加上 UserFlag.c 可进⾏如下操作userFlag = userFlag | Userflag.c如想去掉UserFlag.c 可进⾏如下操作userFlag = userFlag ^ UserFlag.c如我们要判断是该标识中是否存在c可进⾏如下操作(userFlag & UserFlag.c) == UserFlag.c是不是与SQL Server 中的操作类似,位运算不管什么语⾔都是通⽤的,呵呵可惜Access 不⽀持位运算