zoukankan      html  css  js  c++  java
  • Ado.Net查询语句使用临时表做条件

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Text;
    
    namespace WindowsFormsApp1
    {
        public class SQLHelper
        {
            static string connStr = "Data Source='.';Initial Catalog='DBName';User ID='sa';Password='123456';Connect Timeout=60000;";
    
            /// <summary>
            /// 带临时查询表sql  
            /// </summary>
            /// <param name="Sql"> 查询sql </param>
            /// <param name="CreateTmpTablesql"> 创建临时表语句 </param>
            /// <param name="TmpTableName">在数据库中创建临时表sql</param>
            /// <param name="TmpData">临时表数据</param>
            public static DataSet GetDataTmpTableSqlBulkCopy(string Sql, string CreateTmpTablesql, string TmpTableName, DataTable TmpData)
            {
                //构造SQL语句
                StringBuilder sb = new StringBuilder();
                #region 处理临时表数据为空则不处理临时表
                using (SqlConnection thisConn = new SqlConnection(connStr))
                {
                    try
                    {
                        thisConn.Open();
                        if (!string.IsNullOrEmpty(CreateTmpTablesql) && !string.IsNullOrEmpty(TmpTableName) && TmpData != null)
                        {
                            //创建临时表
                            SqlCommand cmd = new SqlCommand(CreateTmpTablesql.ToString(), thisConn);
                            object returnValue = cmd.ExecuteScalar();
                            // 使用 SqlBulkCopy 批量保存临时表数据
                            SqlBulkCopy bulkCopy = new SqlBulkCopy(thisConn);
                            bulkCopy.DestinationTableName = TmpTableName;
                            bulkCopy.BatchSize = TmpData.Rows.Count;
                            bulkCopy.WriteToServer(TmpData);
                        }
                        //查询带临时表的sql
                        DataSet ds = new DataSet();
                        SqlDataAdapter da = new SqlDataAdapter(Sql, thisConn);
                        da.Fill(ds);
                        return ds;
                    }
                    catch (Exception ex)
                    {
                        return null;
                    }
                    finally
                    {
                        thisConn.Close();
                    }
                }
                #endregion 
            }
        }
    }
    // 测试调用
    private void Button1_Click(object sender, EventArgs e)
    {
           // 创建临时表sql语句
           string CreateTmpTablesql = @"select top 1 MethodName into #tmpTable  from AbpAuditLogs";
           DataTable dataTable = new DataTable();
           dataTable.Columns.Add("MethodName");
           foreach (var item in "Index,GetAll".Split(','))
           {
               DataRow row = dataTable.NewRow();
               row["MethodName"] = item;
               dataTable.Rows.Add(row);
           }        
           string sql = @"select * from AbpAuditLogs a where exists ( select * from #tmpTable  tmp where a.MethodName= tmp .MethodName )  ";
           DataSet ds = SQLHelper.GetDataTmpTableSqlBulkCopy(sql, CreateTmpTablesql, "#tmpTable", dataTable);           
    }
  • 相关阅读:
    RabbitMQ教程(二) ——linux下安装rabbitmq
    通讯协议序列化解读(二) protostuff详解教程
    头条号【编编成程】开通
    C++静态成员函数访问非静态成员的几种方法
    深入理解QStateMachine与QEventLoop事件循环的联系与区别
    『重构--改善既有代码的设计』读书笔记---Duplicate Observed Data
    GCC选项-Xlinker和-Wl区别
    『重构--改善既有代码的设计』读书笔记----Replace Array with Object
    解决GDB输出Qt内置类型的显示问题
    GDB源代码查找路径
  • 原文地址:https://www.cnblogs.com/liaoyd/p/11446493.html
Copyright © 2011-2022 走看看