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);           
    }
  • 相关阅读:
    Objective-C入门教程03:属性(@property和@synthesize)
    iOS 开发的9个超有用小技巧
    oc关于非原子属性
    如果局部变量与实例变量同名,那么如何在局部变量的作用域内引用实例变量?
    从0开始搭建vue+webpack脚手架(一)
    ES6学习之 解构赋值
    Vue+webpack项目中实现跨域的http请求
    Vuejs核心思想学习笔记
    更改file文件上传默认CSS样式
    javascript获取style兼容性问题
  • 原文地址:https://www.cnblogs.com/liaoyd/p/11446493.html
Copyright © 2011-2022 走看看