• 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);           
    }
  • 相关阅读:
    OpenCV 限制对比度 图像增强
    2000 * 1000的图像截取大小为20 * 20
    在opencv3中的机器学习算法练习:对OCR进行分类
    OpenCV KNN加载训练好的模型
    OpenCV KNN数字分类
    vim简易配置
    shell简明笔记
    命令行关闭和开启ubuntu图形界面
    忘记Oracle数据库中sys等密码的解决方法
    Oracle常见练习题(2020082201)
  • 原文地址:https://www.cnblogs.com/liaoyd/p/11446493.html
Copyright © 2020-2023  润新知