关于SQL查询枚举的问题,大神懂的来

拉过勾的都算话 2014-01-10 11:19:52
c# asp.net环境,
程序中自定义枚举类型:
enum week {星期一=1,星期二=2,星期三=3,星期四=4,星期五=5,星期六=6,星期日=7};

数据库表A中,有一个字段weekno为int类型,存放的是week的值,例如weekno=2时表示星期二。

问题:
1.gridview绑定数据库表A,怎样使某一列显示weekno值代表的名称,例如当weekno字段=2时,该列显示为“星期二”。(已解决)
2.将枚举绑定到sql语句中,将weekno作为参数获取枚举的值(直接在SQL语句查询出WeekNo对应的枚举类型;SQL语句不是select weekno...么?我想要的是直接把对应的枚举获取过来拼到SQL语句中,之前使用case weekno when 1 then '星期一',但是这样写修改的话太麻烦了 )


知道的请答复一下
...全文
700 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
本拉灯 2014-01-10
  • 打赏
  • 举报
回复
引用 9 楼 u010048568 的回复:
[quote=引用 7 楼 wyd1520 的回复:] [quote=引用 5 楼 u010048568 的回复:] [quote=引用 1 楼 wyd1520 的回复:] 难道你不会在select 后然后代C#里面转成枚举不就完了么。。干啥非得在sql里写。你要是非得在SQL里, 那就写个SQL函数 调用就是了。
额,我是将查询出来的结果用xls导出,列名绑定死了[/quote] .。。。那写个SQL函数吧这样省去了Case When的麻烦。[/quote]SQL函数。。。具体怎么写?求解[/quote]


CREATE FUNCTION WeekString
(
	@weekInt int
)
RETURNS VARCHAR(19)
AS
BEGIN
	declare @result varchar(19);
	set @result=case when @weekInt=1 then '一'
	     when @weekInt=2 then '二'
	     when @weekInt=3 then'三'
	     when @weekInt=4 then '四'
	     when @weekInt=5 then '五'
	     when @weekInt=6 then '六'
	     
	else  '日'
	end;
    return @result;
END
GO

调用就这样
select dbo.WeekString(2);
select dbo.WeekString(字段1),字段2 From xxx;
  • 打赏
  • 举报
回复
DataSet ds = bll.selectUserOrderMoneyToXLS(columns, table, where, orderby);
List<string> list = new List<string>();
list.Add("ID");
list.Add("用户名");
list.Add("昵称");
list.Add("IP");
list.Add("星期");
string filename = "" + DateTime.Now.ToFileTime() + ".xls";
ExportExcel(filename, ds, list, "yyyy-MM-dd");
能不能将枚举的Enum.GetNames(typeof(SourceType)值对应到星期这一列?
智商余额不足 2014-01-10
  • 打赏
  • 举报
回复
引用 8 楼 u010048568 的回复:
[quote=引用 4 楼 hwenycocodq520 的回复:] public string GetWeekName(int weekno){ return ((week)weekno).ToString(); } 1.可以在RowDataBound中处理 weekno列改写它的Text = GetWeekName(该列值); 2.<%#GetWeekName(Convert.ToInt32(Eval("weekno")))%>
额,我是想把枚举直接丢到SQL语句里,将查询的结果导出到xls,不是绑定,绑定的我会[/quote] 哦
  • 打赏
  • 举报
回复
引用 7 楼 wyd1520 的回复:
[quote=引用 5 楼 u010048568 的回复:] [quote=引用 1 楼 wyd1520 的回复:] 难道你不会在select 后然后代C#里面转成枚举不就完了么。。干啥非得在sql里写。你要是非得在SQL里, 那就写个SQL函数 调用就是了。
额,我是将查询出来的结果用xls导出,列名绑定死了[/quote] .。。。那写个SQL函数吧这样省去了Case When的麻烦。[/quote]SQL函数。。。具体怎么写?求解
  • 打赏
  • 举报
回复
引用 4 楼 hwenycocodq520 的回复:
public string GetWeekName(int weekno){ return ((week)weekno).ToString(); } 1.可以在RowDataBound中处理 weekno列改写它的Text = GetWeekName(该列值); 2.<%#GetWeekName(Convert.ToInt32(Eval("weekno")))%>
额,我是想把枚举直接丢到SQL语句里,将查询的结果导出到xls,不是绑定,绑定的我会
本拉灯 2014-01-10
  • 打赏
  • 举报
回复
引用 5 楼 u010048568 的回复:
[quote=引用 1 楼 wyd1520 的回复:] 难道你不会在select 后然后代C#里面转成枚举不就完了么。。干啥非得在sql里写。你要是非得在SQL里, 那就写个SQL函数 调用就是了。
额,我是将查询出来的结果用xls导出,列名绑定死了[/quote] .。。。那写个SQL函数吧这样省去了Case When的麻烦。
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
在C#中实现枚举和数值的转换,或者干脆使用EF,它原生支持枚举。
集体怎么实现?求解
  • 打赏
  • 举报
回复
引用 1 楼 wyd1520 的回复:
难道你不会在select 后然后代C#里面转成枚举不就完了么。。干啥非得在sql里写。你要是非得在SQL里, 那就写个SQL函数 调用就是了。
额,我是将查询出来的结果用xls导出,列名绑定死了
智商余额不足 2014-01-10
  • 打赏
  • 举报
回复
public string GetWeekName(int weekno){ return ((week)weekno).ToString(); } 1.可以在RowDataBound中处理 weekno列改写它的Text = GetWeekName(该列值); 2.<%#GetWeekName(Convert.ToInt32(Eval("weekno")))%>
  • 打赏
  • 举报
回复
其实枚举就是一组整型数值,只要使用(int)枚举变量名,就可以转换其对应原数值了
threenewbee 2014-01-10
  • 打赏
  • 举报
回复
在C#中实现枚举和数值的转换,或者干脆使用EF,它原生支持枚举。
本拉灯 2014-01-10
  • 打赏
  • 举报
回复
难道你不会在select 后然后代C#里面转成枚举不就完了么。。干啥非得在sql里写。你要是非得在SQL里, 那就写个SQL函数 调用就是了。
风吹腚腚凉 2014-01-10
  • 打赏
  • 举报
回复
引用 12 楼 wyd1520 的回复:
[quote=引用 9 楼 u010048568 的回复:] [quote=引用 7 楼 wyd1520 的回复:] [quote=引用 5 楼 u010048568 的回复:] [quote=引用 1 楼 wyd1520 的回复:] 难道你不会在select 后然后代C#里面转成枚举不就完了么。。干啥非得在sql里写。你要是非得在SQL里, 那就写个SQL函数 调用就是了。
额,我是将查询出来的结果用xls导出,列名绑定死了[/quote] .。。。那写个SQL函数吧这样省去了Case When的麻烦。[/quote]SQL函数。。。具体怎么写?求解[/quote]


CREATE FUNCTION WeekString
(
	@weekInt int
)
RETURNS VARCHAR(19)
AS
BEGIN
	declare @result varchar(19);
	set @result=case when @weekInt=1 then '一'
	     when @weekInt=2 then '二'
	     when @weekInt=3 then'三'
	     when @weekInt=4 then '四'
	     when @weekInt=5 then '五'
	     when @weekInt=6 then '六'
	     
	else  '日'
	end;
    return @result;
END
GO

调用就这样
select dbo.WeekString(2);
select dbo.WeekString(字段1),字段2 From xxx;
[/quote] 用函数不错。
  • 打赏
  • 举报
回复
引用 12 楼 wyd1520 的回复:
[quote=引用 9 楼 u010048568 的回复:] [quote=引用 7 楼 wyd1520 的回复:] [quote=引用 5 楼 u010048568 的回复:] [quote=引用 1 楼 wyd1520 的回复:] 难道你不会在select 后然后代C#里面转成枚举不就完了么。。干啥非得在sql里写。你要是非得在SQL里, 那就写个SQL函数 调用就是了。
额,我是将查询出来的结果用xls导出,列名绑定死了[/quote] .。。。那写个SQL函数吧这样省去了Case When的麻烦。[/quote]SQL函数。。。具体怎么写?求解[/quote]


CREATE FUNCTION WeekString
(
	@weekInt int
)
RETURNS VARCHAR(19)
AS
BEGIN
	declare @result varchar(19);
	set @result=case when @weekInt=1 then '一'
	     when @weekInt=2 then '二'
	     when @weekInt=3 then'三'
	     when @weekInt=4 then '四'
	     when @weekInt=5 then '五'
	     when @weekInt=6 then '六'
	     
	else  '日'
	end;
    return @result;
END
GO

调用就这样
select dbo.WeekString(2);
select dbo.WeekString(字段1),字段2 From xxx;
[/quote]谢谢

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧