ado.net查询数量和判断是否存在

-一个大坑 2019-09-02 03:40:34
有更好的方法吗

DataTable dt = QueryDataTable(strSQL, commandParameters);
return dt.Rows.Count;

DataTable dt = QueryDataTable(strSQL, commandParameters);
return dt.Rows.Count > 0;

public static DataTable QueryDataTable(string strConn, string strSQL, List<OracleParameter> commandParameters = null)
{
using (OracleConnection conn = new OracleConnection(strConn))
{
OracleCommand cmd = new OracleCommand(strSQL, conn)
{
CommandType = CommandType.Text
};
//将传入的参数信息赋值给命令参数
if (commandParameters != null && commandParameters.Count > 0)
{
cmd.Parameters.AddRange(commandParameters.ToArray());
}
OracleDataAdapter oda = new OracleDataAdapter(cmd);
conn.Open();
DataSet ds = new DataSet();
oda.Fill(ds);
conn.Close();
return ds.Tables[0];
}

//var odr = (OracleDataReader)SQLCommand(strConn, strSQL, commandParameters, o => o.ExecuteReader());
//DataTable dt = new DataTable();
//dt.Load(odr);
//return dt;
}
...全文
340 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hello World, 2019-09-05
  • 打赏
  • 举报
回复
用不同的SQL语句,返回行数就Count即可,不用返回行,分页什么的返回总行数也是这样,全查出来遇到大数据就要挂了
-一个大坑 2019-09-04
  • 打赏
  • 举报
回复
引用 7 楼 YBcsdn1996 的回复:
你判断是否存在 还不是 全查出来了 既然查出来了 那行数 不就是 你的datatable.rows.count吗 所以 交互一次就行了啊
其实判断是否存在和求行数都挺简单,只不过我觉得是不同的需求,所以写了两个方法进行调用
-一个大坑 2019-09-04
  • 打赏
  • 举报
回复
引用 8 楼 ¿?¿? 的回复:
我给个不是很好用,但是我一直在用的方法 先写sql select count(0) from table where 条件

public static int QueryDataTable(string strConn, string strSQL, List<OracleParameter> commandParameters = null)
        {
            using (OracleConnection conn = new OracleConnection(strConn))
            {
                OracleCommand cmd = new OracleCommand(strSQL, conn)
                {
                    CommandType = CommandType.Text
                };
                //将传入的参数信息赋值给命令参数
                if (commandParameters != null && commandParameters.Count > 0)
                {
                    cmd.Parameters.AddRange(commandParameters.ToArray());
                }
               
                conn.Open();
                int count =Convert.toInt32(cmd.ExecuteScalar());
                conn.Close();
                return count;
            }
        }
因为在sql中就返回了行数,所以调用时直接返回bool就行 直接调用 QueryDataTable()>0就行了 纯手打
public static T QueryScalar<T>(string strSQL, List<MySql.Data.MySqlClient.MySqlParameter> commandParameters = null); 如果用select count(0) from table where 条件,调用这个方法就行 判断是否存在,如果只能查询后判断数量是否>0,那就无所谓了,主要发帖是看下OracleCommand 有没有自带的方法,查询后判断还要先把查询结果封装成datatable再比较
¿?¿? 2019-09-03
  • 打赏
  • 举报
回复
我给个不是很好用,但是我一直在用的方法 先写sql select count(0) from table where 条件

public static int QueryDataTable(string strConn, string strSQL, List<OracleParameter> commandParameters = null)
        {
            using (OracleConnection conn = new OracleConnection(strConn))
            {
                OracleCommand cmd = new OracleCommand(strSQL, conn)
                {
                    CommandType = CommandType.Text
                };
                //将传入的参数信息赋值给命令参数
                if (commandParameters != null && commandParameters.Count > 0)
                {
                    cmd.Parameters.AddRange(commandParameters.ToArray());
                }
               
                conn.Open();
                int count =Convert.toInt32(cmd.ExecuteScalar());
                conn.Close();
                return count;
            }
        }
因为在sql中就返回了行数,所以调用时直接返回bool就行 直接调用 QueryDataTable()>0就行了 纯手打
YBcsdn1996 2019-09-03
  • 打赏
  • 举报
回复
引用 6 楼 -一个大坑 的回复:
[quote=引用 5 楼 YBcsdn1996 的回复:]
为啥要去交互两次

DataTable dt = QueryDataTable(strSQL, commandParameters);
这一句不就行了吗

dt.rows.count 不就 是你的行数吗

一个是查询行数
一个是判断是否存在[/quote]

你判断是否存在 还不是 全查出来了 既然查出来了 那行数 不就是 你的datatable.rows.count吗

所以 交互一次就行了啊
-一个大坑 2019-09-03
  • 打赏
  • 举报
回复
引用 5 楼 YBcsdn1996 的回复:
为啥要去交互两次 DataTable dt = QueryDataTable(strSQL, commandParameters); 这一句不就行了吗 dt.rows.count 不就 是你的行数吗
一个是查询行数 一个是判断是否存在
YBcsdn1996 2019-09-02
  • 打赏
  • 举报
回复
为啥要去交互两次

DataTable dt = QueryDataTable(strSQL, commandParameters);
这一句不就行了吗

dt.rows.count 不就 是你的行数吗
  • 打赏
  • 举报
回复
没有了吧
-一个大坑 2019-09-02
  • 打赏
  • 举报
回复
引用 2 楼 冰川711 的回复:
不用ef了? 怎么又搞上ado了
帮user写个job,用ef太麻烦了 发现用的OracleHelper没有统计数量,准备自己加一个
冰川711 2019-09-02
  • 打赏
  • 举报
回复
不用ef了? 怎么又搞上ado了
-一个大坑 2019-09-02
  • 打赏
  • 举报
回复
比如不用把OracleDataAdapter转成DataTable,或者OracleCommand有自带的可以直接用

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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