比如我现在数据库里面有这样的一堆数据
ID Name sign
1 A 1
2 B 1
3 C 1
4 A 2
5 B 2
6 C 2
7 A 1我要分别找出一个ID最大且sign为1和2的Name的值出来(分别为a1,a2) 我现在是这样想的for(n=7; ?1 ;n--)
{
string str1 = "select * from 表 where ID= " + n + "";
SqlCommand cmd2 = new SqlCommand(str1, conn);
SqlDataReader dr1 = cmd2.ExecuteReader();
if(dr1["sign"].ToString() == "1")
{
}
else
{
}
}里面的判断语句 如果我获得了我想要的结果该怎么退出呢?还有结束循环的条件怎么写呢?C#数据库
ID Name sign
1 A 1
2 B 1
3 C 1
4 A 2
5 B 2
6 C 2
7 A 1我要分别找出一个ID最大且sign为1和2的Name的值出来(分别为a1,a2) 我现在是这样想的for(n=7; ?1 ;n--)
{
string str1 = "select * from 表 where ID= " + n + "";
SqlCommand cmd2 = new SqlCommand(str1, conn);
SqlDataReader dr1 = cmd2.ExecuteReader();
if(dr1["sign"].ToString() == "1")
{
}
else
{
}
}里面的判断语句 如果我获得了我想要的结果该怎么退出呢?还有结束循环的条件怎么写呢?C#数据库
1 A 1
2 B 1
3 C 1
4 A 2
5 B 2
6 C 2
7 A 1
结果是
ID Name sign
6 C 2
7 A 1???????????????
for(n=7; ?1 ;n--)
{
...
}
数据库一修改,你这程序难道也跟着改?
就是分别输出sign为1和2的最大ID
这只是我局的一个简单例子 您有什么好的建议能否教一下小弟,我需求就是遍历数据从最后开始,得到标记分别为1和2的最大ID就退出 返回相对应的Name
对 就是这样的结果
我需求就是遍历数据从最后开始,得到标记分别为1和2的最大ID就退出 返回相对应的Name 要是您有好的方法能否教一下小弟
对 就是这样的结果
我需求就是遍历数据从最后开始,得到标记分别为1和2的最大ID就退出 返回相对应的Name 要是您有好的方法能否教一下小弟 select a.* from #tb a inner join
(
select MAX(id) id,sign from #tb b group by sing
)b on a.id=b.id and a.sign=b.sign
(select MAX(id) id,sing from #tb b group by sign )b
on a.id=b.id and a.sign=b.signid name sing
----------- -------------------- -----------
6 C 2
7 A 1(2 行受影响)
CREATE TABLE tbSign
(
ID INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR(10),
[Sign] int
)insert into tbSign
select 'A','1'
union all
select 'B','1'
union all
select 'C','1'
union all
select 'A','2'
union all
select 'B','2'
union all
select 'C','2'
union all
select 'A','1'
select * from tbSign;select b.* from tbSign b
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.ID
(
ID INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR(10),
[Sign] int
)insert into tbSign
select 'A','1'
union all
select 'B','1'
union all
select 'C','1'
union all
select 'A','2'
union all
select 'B','2'
union all
select 'C','2'
union all
select 'A','1'
select * from tbSign;select b.* from tbSign b
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.ID
/*
ID Name Sign
----------- ---------- -----------
6 C 2
7 A 1(2 行受影响)
*/
我是想要在程序里面获取Name
我以为我发错版了 返回去一看就是C#版
你们高手写程序都是直接用SQL语句解决的嘛
小弟还学生 写写程序锻炼一下
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.ID
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.ID
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.IDselect b.Name from tbSign b
,(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID and .... order by b.ID
红色部分加条件
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.IDselect b.Name from tbSign b
,(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID and .... order by b.ID
红色部分加条件在数据库里面执行有数据
可是在C#里面执行就显示这个错误这是什么原因呢?
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.IDselect b.Name from tbSign b
,(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID and .... order by b.ID
红色部分加条件在数据库里面执行有数据
可是在C#里面执行就显示这个错误这是什么原因呢?dr为null,你断点把SQL语句撒到数据库中去执行一下,或者给出你要测试的数据。
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.IDselect b.Name from tbSign b
,(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID and .... order by b.ID
红色部分加条件在数据库里面执行有数据
可是在C#里面执行就显示这个错误这是什么原因呢?dr为null,你断点把SQL语句撒到数据库中去执行一下,或者给出你要测试的数据。
我断点检查就是dr数据为空 同样的语句我在SQL里面就显示上面那两组数据
测试数据如下:
DutyDate Dutyweek DutyName sign
20130514 星期二 张三 1
20130515 星期三 李四 1
20130516 星期四 王五 1
20130517 星期五 赵六 1
20130518 星期六 张三 2
20130519 星期日 李四 2
20130520 星期一 张三 1
20130521 星期二 李四 1
20130522 星期三 王五 1
20130523 星期四 赵六 1
20130524 星期五 张三 1
20130525 星期六 王五 2
20130526 星期日 赵六 2
20130527 星期一 李四 1
20130528 星期二 王五 1
20130529 星期三 赵六 1
20130530 星期四 张三 1
20130531 星期五 李四 1
NULL NULL NULL NULL
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.IDselect b.Name from tbSign b
,(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID and .... order by b.ID
红色部分加条件在数据库里面执行有数据
可是在C#里面执行就显示这个错误这是什么原因呢?
是不是你的sql语句里给sign起了别名,所以dr2["sign"]找不到
建议楼主好好看下sql的基本语法,这都是很简单的问题
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.IDselect b.Name from tbSign b
,(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID and .... order by b.ID
红色部分加条件在数据库里面执行有数据
可是在C#里面执行就显示这个错误这是什么原因呢?
是不是你的sql语句里给sign起了别名,所以dr2["sign"]找不到
建议楼主好好看下sql的基本语法,这都是很简单的问题怎么可能是别名的问题 我数据库里面执行没问题显示数据,只是在程序里面就说找不到数据.....
,
(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID order by b.IDselect b.Name from tbSign b
,(select MAX(a.ID) ID,Sign as Sign
from tbSign a group by a.Sign) a
where b.ID=a.ID and .... order by b.ID
红色部分加条件在数据库里面执行有数据
可是在C#里面执行就显示这个错误这是什么原因呢?
是不是你的sql语句里给sign起了别名,所以dr2["sign"]找不到
建议楼主好好看下sql的基本语法,这都是很简单的问题怎么可能是别名的问题 我数据库里面执行没问题显示数据,只是在程序里面就说找不到数据.....把SQL语句也贴出来
string str1 = "select b.* from DutyInfo b,(select MAX(a.DutyDate) DutyDate,sign as sign from DutyInfo a group by a.sign) a where b.DutyDate=a.DutyDate order by b.DutyDate";
等你好久了 现在是SQL里面能查到数据 在C#里面就显示上面那图
string str1 = "select b.* from DutyInfo b,(select MAX(a.DutyDate) DutyDate,sign as sign from DutyInfo a group by a.sign) a where b.DutyDate=a.DutyDate order by b.DutyDate";
dr2.Read()
SqlDataReader dr2 = cmd2.ExecuteReader();
while (dr2.Read()) {
if (dr2.HasRows) {
if (dr2["sign"].ToString() == "1")
{
string a = dr2["dutyName"].ToString();
j = name.IndexOf(a);
}
else {
.....
}
}
}你那数据都不用while循环读的 ?
先了解ADO.NET的几个操作数据库的对象,再去写代码
SqlDataReader
SqlDataReader.Read 方法
SqlCommand.ExecuteReader 方法 ()
嗯嗯 我看了ADO好几次了 好几次都漏东西版主 再请教一个问题,我要是在我上面的那个语句中 查询某段ID内的情况呢
怎么插入 ID between dt1 and dt2 呢? 还是读取出来ID最大的1和2出来
嗯嗯 我看了ADO好几次了 好几次都漏东西版主 再请教一个问题,我要是在我上面的那个语句中 查询某段ID内的情况呢
怎么插入 ID between dt1 and dt2 呢? 还是读取出来ID最大的1和2出来
看16L代码
select b.* from DutyInfo b
,
(select MAX(a.DutyDate) DutyDate,sign as sign
from DutyInfo a group by a.sign) a
where b.DutyDate=a.DutyDate and b.DutyDate<'20130601'
order by b.DutyDate为什么会没数据呢?
select b.* from DutyInfo b
,
(select MAX(a.DutyDate) DutyDate,sign as sign
from DutyInfo a group by a.sign) a
where b.DutyDate=a.DutyDate and b.DutyDate<'20130601'
order by b.DutyDate为什么会没数据呢?
select b.* from DutyInfo b
,
(select MAX(a.DutyDate) DutyDate,sign as sign
from DutyInfo a group by a.sign) a
where b.DutyDate=a.DutyDate
order by b.DutyDate
查出来的数据确定有时间小于20130601的?有多少条?不多的话贴上来
select b.* from DutyInfo b
,
(select MAX(a.DutyDate) DutyDate,sign as sign
from DutyInfo a group by a.sign) a
where b.DutyDate=a.DutyDate and b.DutyDate<'20130601'
order by b.DutyDate为什么会没数据呢?
select b.* from DutyInfo b
,
(select MAX(a.DutyDate) DutyDate,sign as sign
from DutyInfo a group by a.sign) a
where b.DutyDate=a.DutyDate
order by b.DutyDate
查出来的数据确定有时间小于20130601的?有多少条?不多的话贴上来20130514 星期二 张三 1
20130515 星期三 李四 1
20130516 星期四 王五 1
20130517 星期五 赵六 1
20130518 星期六 张三 2
20130519 星期日 李四 2
20130520 星期一 张三 1
20130521 星期二 李四 1
20130522 星期三 王五 1
20130523 星期四 赵六 1
20130524 星期五 张三 1
20130525 星期六 王五 2
20130526 星期日 赵六 2
20130527 星期一 李四 1
20130528 星期二 王五 1
20130529 星期三 赵六 1
20130530 星期四 张三 1
20130531 星期五 李四 1
NULL NULL NULL NULL
,
(select MAX(a.DutyDate) DutyDate,sign as sign
from DutyInfo a group by a.sign) a
where b.DutyDate=a.DutyDate and CONVERT(varchar(100),b.DutyDate, 112)<'20130601'
order by b.DutyDate