则提示有未包含在聚合函数中的列,请问这个问题怎么解决,谢谢了。
12 个解决方案
#1
写二条sql语句实现
#2
SqlDataReader.RecordsAffected 属性
已更改、插入或删除的行数;如果没有任何行受到影响或语句失败,则为 0;-1 表示 SELECT 语句。
直到读取了所有行并关闭 SqlDataReader 时,才会设置 RecordsAffected 属性。
该属性的值是累积值。例如,如果以批处理模式插入两个记录,则 RecordsAffected 的值将为二。
当 SqlDataReader 关闭后,只能调用 IsClosed 和 RecordsAffected 属性。
已更改、插入或删除的行数;如果没有任何行受到影响或语句失败,则为 0;-1 表示 SELECT 语句。
直到读取了所有行并关闭 SqlDataReader 时,才会设置 RecordsAffected 属性。
该属性的值是累积值。例如,如果以批处理模式插入两个记录,则 RecordsAffected 的值将为二。
当 SqlDataReader 关闭后,只能调用 IsClosed 和 RecordsAffected 属性。
#3
1. 循环SqlDataReader,取出总条数
2。 查询时用两个SQL语句,用SqlDataReader.NextResult获取第二个结果
2。 查询时用两个SQL语句,用SqlDataReader.NextResult获取第二个结果
#4
select count(*) as cun,* from huifu where bianhao='0001'
你这条里面改成
select count(*) as cun from huifu where bianhao='0001'
试试
你这条里面改成
select count(*) as cun from huifu where bianhao='0001'
试试
#5
select count(*) from tablename where condition
#6
由于sqlreader都是有command对象查询出来的,而在command对象里面的sqlparameter可以设置传出值,
reader是以向前游标方式读取数据,因此光用reader不能得道记录数
reader是以向前游标方式读取数据,因此光用reader不能得道记录数
#7
1\、select count(*) as cun from huifu where bianhao='0001'
2、调用command对象的 ExecuteScalar ,返回一个对象类型,仅表示结果集中第一行第一列的值。需要显式的转换成整形
3、自己用循环写出来(最差的方法了)
2、调用command对象的 ExecuteScalar ,返回一个对象类型,仅表示结果集中第一行第一列的值。需要显式的转换成整形
3、自己用循环写出来(最差的方法了)
#8
不想用循环所以才问有没有其他办法的,
to:vivianfdlpw()您所说的用两个sql语句实现起来应该怎么做呢,能不能给个例子看看啊,谢谢了。
to:vivianfdlpw()您所说的用两个sql语句实现起来应该怎么做呢,能不能给个例子看看啊,谢谢了。
#9
不知道楼主这么做是因为什么?
你的查询语句就算获取数据总数,也会有大量的冗余
每条记录都会有一个记录总数的的字段,
若楼主坚持这么做的话 ,可以
把查询语句改为
select *,(select count(*) from huifu where bianhao='0001') as cun from huifu where bianhao='0001'
不过最后还是建议楼主用存储过程,用返回值获取记录总数。
你的查询语句就算获取数据总数,也会有大量的冗余
每条记录都会有一个记录总数的的字段,
若楼主坚持这么做的话 ,可以
把查询语句改为
select *,(select count(*) from huifu where bianhao='0001') as cun from huifu where bianhao='0001'
不过最后还是建议楼主用存储过程,用返回值获取记录总数。
#10
谢谢了,现在时间比较紧了,等有空再把它改成存储过程吧。
主要就是不想用循环来计算查询的总数。
主要就是不想用循环来计算查询的总数。
#11
string connString="server=(local);database=test;trusted_connection=true";
SqlConnection conn=new SqlConnection (connString);
conn.Open ();
string sql="select * from A select @@rowcount";
SqlCommand cmd=new SqlCommand (sql,conn);
SqlDataReader dr=cmd.ExecuteReader();
//获取第一个记录集
while(dr.Read())
{
//代码
}
if(dr.NextResult())//下一个记录集
{
if(dr.Read())
{
Response.Write ("记录数为"+dr[0].ToString());
}
}
//关闭连接
dr.Close ();
conn.Close ();
SqlConnection conn=new SqlConnection (connString);
conn.Open ();
string sql="select * from A select @@rowcount";
SqlCommand cmd=new SqlCommand (sql,conn);
SqlDataReader dr=cmd.ExecuteReader();
//获取第一个记录集
while(dr.Read())
{
//代码
}
if(dr.NextResult())//下一个记录集
{
if(dr.Read())
{
Response.Write ("记录数为"+dr[0].ToString());
}
}
//关闭连接
dr.Close ();
conn.Close ();
#12
我的老天,调用command对象的 ExecuteScalar
这个不就是最好的办法嘛.
看一下.net framework1.1开发包中关于ExecuteScalar
的这部分.简单的一塌糊涂.
这个不就是最好的办法嘛.
看一下.net framework1.1开发包中关于ExecuteScalar
的这部分.简单的一塌糊涂.
#1
写二条sql语句实现
#2
SqlDataReader.RecordsAffected 属性
已更改、插入或删除的行数;如果没有任何行受到影响或语句失败,则为 0;-1 表示 SELECT 语句。
直到读取了所有行并关闭 SqlDataReader 时,才会设置 RecordsAffected 属性。
该属性的值是累积值。例如,如果以批处理模式插入两个记录,则 RecordsAffected 的值将为二。
当 SqlDataReader 关闭后,只能调用 IsClosed 和 RecordsAffected 属性。
已更改、插入或删除的行数;如果没有任何行受到影响或语句失败,则为 0;-1 表示 SELECT 语句。
直到读取了所有行并关闭 SqlDataReader 时,才会设置 RecordsAffected 属性。
该属性的值是累积值。例如,如果以批处理模式插入两个记录,则 RecordsAffected 的值将为二。
当 SqlDataReader 关闭后,只能调用 IsClosed 和 RecordsAffected 属性。
#3
1. 循环SqlDataReader,取出总条数
2。 查询时用两个SQL语句,用SqlDataReader.NextResult获取第二个结果
2。 查询时用两个SQL语句,用SqlDataReader.NextResult获取第二个结果
#4
select count(*) as cun,* from huifu where bianhao='0001'
你这条里面改成
select count(*) as cun from huifu where bianhao='0001'
试试
你这条里面改成
select count(*) as cun from huifu where bianhao='0001'
试试
#5
select count(*) from tablename where condition
#6
由于sqlreader都是有command对象查询出来的,而在command对象里面的sqlparameter可以设置传出值,
reader是以向前游标方式读取数据,因此光用reader不能得道记录数
reader是以向前游标方式读取数据,因此光用reader不能得道记录数
#7
1\、select count(*) as cun from huifu where bianhao='0001'
2、调用command对象的 ExecuteScalar ,返回一个对象类型,仅表示结果集中第一行第一列的值。需要显式的转换成整形
3、自己用循环写出来(最差的方法了)
2、调用command对象的 ExecuteScalar ,返回一个对象类型,仅表示结果集中第一行第一列的值。需要显式的转换成整形
3、自己用循环写出来(最差的方法了)
#8
不想用循环所以才问有没有其他办法的,
to:vivianfdlpw()您所说的用两个sql语句实现起来应该怎么做呢,能不能给个例子看看啊,谢谢了。
to:vivianfdlpw()您所说的用两个sql语句实现起来应该怎么做呢,能不能给个例子看看啊,谢谢了。
#9
不知道楼主这么做是因为什么?
你的查询语句就算获取数据总数,也会有大量的冗余
每条记录都会有一个记录总数的的字段,
若楼主坚持这么做的话 ,可以
把查询语句改为
select *,(select count(*) from huifu where bianhao='0001') as cun from huifu where bianhao='0001'
不过最后还是建议楼主用存储过程,用返回值获取记录总数。
你的查询语句就算获取数据总数,也会有大量的冗余
每条记录都会有一个记录总数的的字段,
若楼主坚持这么做的话 ,可以
把查询语句改为
select *,(select count(*) from huifu where bianhao='0001') as cun from huifu where bianhao='0001'
不过最后还是建议楼主用存储过程,用返回值获取记录总数。
#10
谢谢了,现在时间比较紧了,等有空再把它改成存储过程吧。
主要就是不想用循环来计算查询的总数。
主要就是不想用循环来计算查询的总数。
#11
string connString="server=(local);database=test;trusted_connection=true";
SqlConnection conn=new SqlConnection (connString);
conn.Open ();
string sql="select * from A select @@rowcount";
SqlCommand cmd=new SqlCommand (sql,conn);
SqlDataReader dr=cmd.ExecuteReader();
//获取第一个记录集
while(dr.Read())
{
//代码
}
if(dr.NextResult())//下一个记录集
{
if(dr.Read())
{
Response.Write ("记录数为"+dr[0].ToString());
}
}
//关闭连接
dr.Close ();
conn.Close ();
SqlConnection conn=new SqlConnection (connString);
conn.Open ();
string sql="select * from A select @@rowcount";
SqlCommand cmd=new SqlCommand (sql,conn);
SqlDataReader dr=cmd.ExecuteReader();
//获取第一个记录集
while(dr.Read())
{
//代码
}
if(dr.NextResult())//下一个记录集
{
if(dr.Read())
{
Response.Write ("记录数为"+dr[0].ToString());
}
}
//关闭连接
dr.Close ();
conn.Close ();
#12
我的老天,调用command对象的 ExecuteScalar
这个不就是最好的办法嘛.
看一下.net framework1.1开发包中关于ExecuteScalar
的这部分.简单的一塌糊涂.
这个不就是最好的办法嘛.
看一下.net framework1.1开发包中关于ExecuteScalar
的这部分.简单的一塌糊涂.