using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
///
/// 测试用例
///
namespace TestCase
{
class Program
{
static System.Data.DataSet dataSet = null;
public static SQLHelper.ConnectionParameters Parameters { get; set; } = new SQLHelper.ConnectionParameters();
static void Main( string[] args )
{
// 打开一个数据库;
OpenDatabase();
// 初始化数据库连接串;
InitConnection();
// 分离数据库(不需要admin权限);
//Parameters.DetachDatabase("db");
// 附加数据库(程序需要使用admin权限运行, 否则附加失败);
//Parameters.AttachDatabase("db", @"E:\lyfzClassicSoft\服务端\数据\db.mdf", @"E:\lyfzClassicSoft\服务端\数据\db_log.LDF");
/*
// 不参数化的sql语句;
QueryWithCommandText();
// 参数化的sql语句;
QueryWithParameters();
// 表是否存在;
if ( IsTableExists("dindan") )
Console.WriteLine("表存在");
else
Console.WriteLine("表不存在");
// 表字段是否存在;
if ( IsColumnExists("dindan", "id1") )
Console.WriteLine("表字段存在");
else
Console.WriteLine("表字段不存在");
// 视图是否存在;
if ( IsViewExists("dindanclient1") )
Console.WriteLine("视图存在");
else
Console.WriteLine("视图不存在");
*/
//Test("Development", "lowdb");
//Test("Development", "lowdb2");
//Test2("Development", "lowdb");
//Test2("Development", "lowdb2");
//Test3("Development", "lowdb", "select * from Vw_OrderReport where Ord_Type in ('0','1','2') and (取件状态 is null or 取件状态 in (0,1))");
//Test3("Development", "lowdb", "select * from Vw_OrderProcessCustomer");
//Test3("Development", "lowdb2", "select * from Vw_OrderReport where Ord_Type in ('0','1','2') and (取件状态 is null or 取件状态 in (0,1))");
//Test3("Development", "lowdb2", "select * from Vw_OrderProcessCustomer");
//Test3("192.168.1.19,1433", "LYFZERPDB", "select * from Vw_OrderReport where Ord_Type in ('0','1','2') and (取件状态 is null or 取件状态 in (0,1))");
//Test3("192.168.1.19,1433", "LYFZERPDB", "select * from Vw_OrderProcessCustomer");
Test5("Development", "Platinum");
// 结束程序;
Console.ReadKey();
}
///
/// 打开一个数据库连接;
///
public static void OpenDatabase()
{
// 创建连接参数对象, 并初始所有参数;
SQLHelper.ConnectionParameters parameters = new SQLHelper.ConnectionParameters();
// 数据库服务地址;
parameters.DatabaseServer = "127.0.0.1";
// 数据库服务地址端口号;
parameters.DatabasePort = 0;
// 数据库名称;
parameters.DatabaseName = "db";
// 数据库账号;
parameters.DatabaseAccount = "sa";
// 数据库密码;
parameters.DatabasePassword = "ly1234";
// 初始化连接串;
parameters.InitConnectParameters();
// 打印出连接串;
System.Diagnostics.Debug.Write(parameters.ConnectionString + "\n", "正常连接串");
System.Diagnostics.Debug.Write(parameters.MasterConnectionString + "\n", "Master连接串");
System.Diagnostics.Debug.Write(parameters.TrustedConnectionString + "\n", "本地信任连接串");
// 创建一个连接对象;
try
{
System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(parameters.ConnectionString);
connection.Open();
Console.WriteLine("成功打开连接\n");
}
catch ( Exception e )
{
Console.WriteLine(e.Message);
}
}
///
/// 初始化数据库连接串;
///
public static void InitConnection()
{
// 数据库服务地址;
Parameters.DatabaseServer = "127.0.0.1";
// 数据库服务地址端口号;
Parameters.DatabasePort = 0;
// 数据库名称;
Parameters.DatabaseName = "db";
// 数据库账号;
Parameters.DatabaseAccount = "sa";
// 数据库密码;
Parameters.DatabasePassword = "ly1234";
// 初始化连接串;
Parameters.InitConnectParameters();
// 该函数未完成,不建议使用(当前使用结果与上一句一致);
Parameters.InitConnectParameters(
Parameters.DatabaseServer,
Parameters.DatabaseName,
Parameters.DatabaseAccount,
Parameters.DatabasePassword,
Parameters.DatabasePort, 100, 5, 300);
}
public static void QueryWithCommandText()
{
try
{
// 查询数据集: 不使用参数化, 直接语句查询;
System.Data.DataTable dt = SQLHelper.SqlHelper.ExecuteDataset(Parameters.ConnectionString, System.Data.CommandType.Text, "select * from dindan where time1 > '2016-01-01'").Tables[0];
if ( dt != null && dt.Rows.Count != 0 )
{
for ( int i = 0; i < dt.Rows.Count; i++ )
{
Console.WriteLine("{0}, {1}, {2}\n", dt.Rows[i]["id"], dt.Rows[i]["name1"], dt.Rows[i]["name2"]);
}
}
}
catch ( Exception e )
{
Console.WriteLine(e.Message);
}
}
public static void QueryWithParameters()
{
try
{
// 查询数据集: 使用参数化;
System.Data.SqlClient.SqlParameter[] sqlParameters =
{
new System.Data.SqlClient.SqlParameter("@time1", "2016-01-01"),
new System.Data.SqlClient.SqlParameter("@taoxijiage", "500")
};
System.Data.DataTable dt = SQLHelper.SqlHelper.ExecuteDataset(
Parameters.ConnectionString,
System.Data.CommandType.Text,
"select * from dindan where time1 > @time1 and taoxijiage > @taoxijiage",
sqlParameters).Tables[0];
if ( dt != null && dt.Rows.Count != 0 )
{
for ( int i = 0; i < dt.Rows.Count; i++ )
{
Console.WriteLine("{0}, {1}, {2}, {3}\n", dt.Rows[i]["id"], dt.Rows[i]["name1"], dt.Rows[i]["name2"], dt.Rows[i]["taoxijiage"]);
}
}
}
catch ( Exception e )
{
Console.WriteLine(e.Message);
}
}
///
/// 指定表名是否存在;
///
///
///
public static bool IsTableExists( string tableName )
{
string strSQL = "select count(*) from sysobjects where id = object_id(N'[" + tableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1";
object obj = SQLHelper.SqlHelper.ExecuteScalar(Parameters.ConnectionString, System.Data.CommandType.Text, strSQL);
if ( (Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)) )
return false;
return (int.Parse(obj.ToString()) > 0) ? true : false;
}
///
/// 指定表的字段是否存在;
///
///
///
///
public static bool IsColumnExists( string tableName, string columnName )
{
string strSQL = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'";
object obj = SQLHelper.SqlHelper.ExecuteScalar(Parameters.ConnectionString, System.Data.CommandType.Text, strSQL);
if ( (Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)) )
return false;
return (int.Parse(obj.ToString()) > 0) ? true : false;
}
///
/// 视图是否存在;
///
///
///
public static bool IsViewExists( string viewName )
{
string strSQL = "SELECT count([object_id]) as objCount FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[" + viewName + "]')";
object obj = SQLHelper.SqlHelper.ExecuteScalar(Parameters.ConnectionString, System.Data.CommandType.Text, strSQL);
if ( (Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)) )
return false;
return (int.Parse(obj.ToString()) > 0) ? true : false;
}
public static void Test( string server, string dbname )
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
try
{
// 更改参数;
Parameters.DatabaseServer = server;
Parameters.DatabaseName = dbname;
string strSql = @"
--订单的取件状态;
with cte_OrderPickup as(
select OPlist_OrderNumber as OrderNumber
,OPlist_ViceNumber as ViceNumber
,max(OPlist_PickupTime) as PickupTime
,(case
when count(1) = count(case when OPlist_PickupStatus = 0 then '未取' end) then 0 -- 完全未取;
when count(1) != count(case when OPlist_PickupStatus = 1 then '已取' end) then 1 -- 取件中;
when count(1) = count(case when OPlist_PickupStatus = 1 then '已取' end) then 2 -- 全部取完;
end) as PickupStatus
from tb_ErpOrderProductList
where OPlist_Type = '2'
group by OPlist_ViceNumber,OPlist_OrderNumber
),
-- 订单接单人;
cte_OrderMan as (
select OrdPe_OrderNumber, User_Name from tb_ErpOrdersPerson Left Join tb_ErpUser ON tb_ErpOrdersPerson.OrdPe_OrdersPerson = tb_ErpUser.User_EmployeeID
),
cte_OrderPerson as (
select
tb1.OrdPe_OrderNumber as OrderNumber
,stuff((
select ','+ User_Name
from cte_OrderMan as tb0 where tb0.OrdPe_OrderNumber = tb1.OrdPe_OrderNumber
for xml path('')),1,1,'') as OrderPerson
from cte_OrderMan as tb1
group by tb1.OrdPe_OrderNumber
--select dbo.AggregateString([User_Name]+'{$$},') as OrderPerson, OrdPe_OrderNumber as OrderNumber from cte_OrderMan group by OrdPe_OrderNumber
),
--拍照状态;
cte_PhotographyStatus as(
select max(Ordpg_Number) Ordpg_Number
,Ordpg_ViceNumber
,max(Ordpg_Sights) as Ordpg_Sights
,max(Ordpg_PhotographyTime) as Ordpg_PhotographyTime
,case when count(case when Ordpg_PhotographyStatus = 1 then '拍照' end) = Count(1) then 1 else 0 end as Ordpg_PhotographyStatus
from tb_ErpOrdersPhotography
group by Ordpg_ViceNumber
)
select
---------------------------------------------------------------
tb_ErpOrder.ID
,tb_ErpOrder.Ord_DividedShop 分店编号
,tb_ErpOrder.Ord_Number 订单号
,tb_ErpOrder.Ord_Class
,tb_ErpOrder.Ord_OrderClass
,tb_ErpOrder.Ord_SinceOrderNumber 自定义订单号
,tb_ErpOrder.Ord_Type 订单类型
,tb_ErpOrder.Ord_PhotographyCategory 套系类型
,tb_ErpOrder.Ord_CustomerSource 客户来源
,tb_ErpOrder.Ord_SeriesName 套系名称
,tb_ErpOrder.Ord_SeriesPrice 套系价格
---------------------------------------------------------------
,cte_OrderPickup.OrderNumber 订单号
,cte_OrderPickup.PickupStatus 订单取件状态
,cte_OrderPickup.PickupTime 订单最大取件日期
---------------------------------------------------------------
,cte_OrderPerson.OrderNumber 订单号
,cte_OrderPerson.OrderPerson 订单接单人
---------------------------------------------------------------
,tempTB_AggregationCustomer.GP_OrderNumber 订单号
,tempTB_AggregationCustomer.[Cus_CustomerSource] 顾客来源
,tempTB_AggregationCustomer.Cus_Name 顾客姓名
,tempTB_AggregationCustomer.Cus_Name_py 顾客姓名接单
,tempTB_AggregationCustomer.Cus_Sex_cs 顾客性别
,tempTB_AggregationCustomer.Cus_Telephone 顾客电话
,tempTB_AggregationCustomer.Cus_OpenID 顾客微信号
---------------------------------------------------------------
,tb_ErpOrderDigital.Ordv_Number 订单号
,tb_ErpOrderDigital.Ordv_ViceNumber 副订单号
,tb_ErpOrderDigital.Ordv_EarlyRepairStatus 初修状态
,tb_ErpOrderDigital.Ordv_EarlyRepairTime 初修时间
,tb_ErpOrderDigital.Ordv_FilmSelectionStatus 选片状态
,tb_ErpOrderDigital.Ordv_FilmSelectionTime 选片时间
,tb_ErpOrderDigital.Ordv_DesignerStatus 设计状态
,tb_ErpOrderDigital.Ordv_DesignerTime 设计时间
,tb_ErpOrderDigital.Ordv_RefinementStatus 精修状态
,tb_ErpOrderDigital.Ordv_RefinementTime 精修时间
,tb_ErpOrderDigital.Ordv_LookDesignStatus 看设计状态
,tb_ErpOrderDigital.Ordv_LookDesignTime 看设计时间
---------------------------------------------------------------
,cte_PhotographyStatus.Ordpg_Sights 景点名
,cte_PhotographyStatus.Ordpg_PhotographyStatus 拍照状态
,cte_PhotographyStatus.Ordpg_PhotographyTime 拍照时间
---------------------------------------------------------------
from tb_ErpOrder
Left Join cte_OrderPerson ON cte_OrderPerson.OrderNumber = tb_ErpOrder.Ord_Number
Left Join tb_ErpOrderDigital ON tb_ErpOrder.Ord_Number = tb_ErpOrderDigital.Ordv_Number
Left Join tempTB_AggregationCustomer ON tempTB_AggregationCustomer.GP_OrderNumber = tb_ErpOrder.Ord_Number
Left Join cte_OrderPickup ON cte_OrderPickup.ViceNumber = tb_ErpOrderDigital.Ordv_ViceNumber
Left Join tb_ErpOrdersPhotography ON tb_ErpOrderDigital.Ordv_ViceNumber = tb_ErpOrdersPhotography.Ordpg_ViceNumber
Left Join cte_PhotographyStatus ON cte_PhotographyStatus.Ordpg_ViceNumber = tb_ErpOrderDigital.Ordv_ViceNumber
";
dataSet = SQLHelper.SqlHelper.ExecuteDataset(Parameters.ConnectionString, System.Data.CommandType.Text, strSql);
}
catch { }
stopWatch.Stop();
long ticksThisTime = stopWatch.ElapsedMilliseconds;
Console.WriteLine("{0}用时{1}", dbname, ticksThisTime);
}
public static void Test2( string server, string dbname )
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
try
{
// 更改参数;
Parameters.DatabaseServer = server;
Parameters.DatabaseName = dbname;
dataSet = SQLHelper.SqlHelper.ExecuteDataset(Parameters.ConnectionString, System.Data.CommandType.Text, "select * from Vw_OrderProcessCustomer");
}
catch
{
}
stopWatch.Stop();
long ticksThisTime = stopWatch.ElapsedMilliseconds;
Console.WriteLine("{0}用时{1}", dbname, ticksThisTime);
}
public static void Test3( string server, string dbname, string strSql )
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
try
{
// 更改参数;
Parameters.DatabaseServer = server;
Parameters.DatabaseName = dbname;
dataSet = SQLHelper.SqlHelper.ExecuteDataset(Parameters.ConnectionString, System.Data.CommandType.Text, strSql);
}
catch
{
}
stopWatch.Stop();
long ticksThisTime = stopWatch.ElapsedMilliseconds;
Console.WriteLine("{0}用时{1}", dbname, ticksThisTime);
}
public static void Test4( string server, string dbname )
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
System.Data.DataTable dt = null;
try
{
// 更改参数;
Parameters.DatabaseServer = server;
Parameters.DatabaseName = dbname;
dataSet = SQLHelper.SqlHelper.ExecuteDataset(Parameters.ConnectionString, System.Data.CommandType.Text, "select * from Vw_OrderProcessCustomerEx");
if ( dataSet != null && dataSet.Tables.Count != 0 )
{
dt = dataSet.Tables[0];
for ( int i = dt.Rows.Count - 1; i > 0; i-- )
{
System.Data.DataRow dr = dt.Rows[i];
if ( dr["Ord_DividedShop"].ToString() != "SSN001" )
{
dt.Rows.RemoveAt(i);
continue;
}
if ( dr["拍照状态"].ToString() != "OK" )
{
dt.Rows.RemoveAt(i);
continue;
}
if ( dr["选片状态"].ToString() != "未选" )
{
dt.Rows.RemoveAt(i);
continue;
}
if ( dr["取件状态"].ToString() == "OK" )
{
dt.Rows.RemoveAt(i);
continue;
}
}
}
}
catch
{
}
stopWatch.Stop();
long ticksThisTime = stopWatch.ElapsedMilliseconds;
Console.WriteLine("{0}用时{1}, {2}, {3}", dbname, ticksThisTime, dataSet.Tables[0].Rows.Count, dt.Rows.Count);
}
public static void Test5( string server, string dbname )
{
string strSql = @" -- 成本核算
------------------------------------------------------
--订单接单人员;
with cte_OrderMan as (
select OrdPe_OrderNumber, User_Name from tb_ErpOrdersPerson Left Join tb_ErpUser ON tb_ErpOrdersPerson.OrdPe_OrdersPerson = tb_ErpUser.User_EmployeeID
),
cte_OrderPerson as (
select
tb1.OrdPe_OrderNumber as OrderNumber
,stuff(
(select ','+ User_Name from cte_OrderMan as tb0
where tb0.OrdPe_OrderNumber = tb1.OrdPe_OrderNumber
for xml path('')),1,1,''
) as OrderPerson
from cte_OrderMan as tb1
group by tb1.OrdPe_OrderNumber
),
------------------------------------------------------
--订单取件状态;
cte_PickupStatus as (
select
max(OPlist_OrderNumber) OrderNumber
,max(OPlist_PickupTime) PickupTime
,OPlist_ViceNumber
,case sum(convert(int,OPlist_PickupStatus))
when 0 then 0 -- 未取;
when count(1) then 2 -- 已取;
else 1 -- 部分取件;
end as PickupStatus
from tb_ErpOrderProductList where OPlist_Type = '2' group by OPlist_ViceNumber
),
------------------------------------------------------
cte_Scenery as (
select max(Ordpg_Number) OrderNumber, Ordpg_ViceNumber
,stuff(
(select ','+ Ordpg_Sights from tb_ErpOrdersPhotography as tb0
where tb0.Ordpg_ViceNumber = tb1.Ordpg_ViceNumber
for xml path('')),1,1,''
) as 景点
from tb_ErpOrdersPhotography tb1 group by Ordpg_ViceNumber
)
------------------------------------------------------
select
tb_ErpOrder.Ord_Number
--,tb_ErpOrder.Ord_SinceOrderNumber
--,tb_ErpOrder.Ord_Type
--,tb_ErpOrder.Ord_Class
--,tb_ErpOrder.Ord_OrderClass
,tb_ErpOrder.Ord_SeriesName 套系名称
,tb_ErpOrder.Ord_SeriesPrice 套系价格
--,tb_ErpOrder.Ord_Discount
--,tb_ErpOrder.Ord_CreateDateTime
--,tb_ErpOrder.Ord_DividedShop
------------------------------------------------------
--,tempTB_AggregationCustomer.GP_OrderNumber
,tempTB_AggregationCustomer.Cus_Name 顾客姓名
--,tempTB_AggregationCustomer.Cus_Name_py
--,tempTB_AggregationCustomer.Cus_Sex_cs
--,tempTB_AggregationCustomer.Cus_Telephone
------------------------------------------------------
--,cte_OrderPerson.OrderNumber
,cte_OrderPerson.OrderPerson 接单人
------------------------------------------------------
,cte_Scenery.景点
------------------------------------------------------
--,cte_PickupStatus.OPlist_ViceNumber 子订单
,cte_PickupStatus.PickupStatus 取件状态
,cte_PickupStatus.PickupTime 取件时间
------------------------------------------------------
,isnull(
(Ord_SeriesPrice + case when (select sum(case when Plu_GoodsCosts <> '' then convert(decimal(10,2),dbo.fn_GetSumArray(Plu_GoodsCosts)) else 0 end) from tb_ErpPlusPickItems where Plu_OrdNumber = Ord_Number) is null then 0
end ),0.00
) as 套系价格
,(
isnull((select sum(OPlist_CostPrice * OPlist_ProdQuantity) from tb_ErpOrderProductList where OPlist_Type = '1' And OPlist_OrderNumber = Ord_Number),0) +
isnull((select sum(Ws_ProdCostPrice * Ws_ProdQuantity) from tb_ErpWeddingService where Ws_Number = Ord_Number),0) +
isnull((select sum(Ordpg_CostPrice) from tb_ErpOrdersPhotography where Ordpg_Number = Ord_Number),0) +
isnull((select sum(case when Plu_GoodsCosts <> '' then convert(decimal(10,2),dbo.fn_GetSumArray(Plu_GoodsCosts)) else 0 end) from tb_ErpPlusPickItems where Plu_OrdNumber = Ord_Number),0)
) AS 套系成本
,(
select sum(OPlist_CostPrice * OPlist_ProdQuantity) from tb_ErpOrderProductList where OPlist_Type = '1' And OPlist_OrderNumber = Ord_Number
) as 商品成本
,(
select sum(Ws_ProdCostPrice * Ws_ProdQuantity) from tb_ErpWeddingService where Ws_Number = Ord_Number
) as 服务成本
,(
select sum(Ordpg_CostPrice) from tb_ErpOrdersPhotography where Ordpg_Number = Ord_Number
) as 景点成本
,(
select sum(case when Plu_GoodsCosts <> '' then convert(decimal(10,2),dbo.fn_GetSumArray(Plu_GoodsCosts)) else 0 end) from tb_ErpPlusPickItems where Plu_OrdNumber = Ord_Number
) as 加挑总价
------------------------------------------------------
from tb_ErpOrder
Left Join tempTB_AggregationCustomer ON tb_ErpOrder.Ord_Number = tempTB_AggregationCustomer.GP_OrderNumber
Left Join cte_OrderPerson ON tb_ErpOrder.Ord_Number = cte_OrderPerson.OrderNumber
Left Join cte_PickupStatus ON tb_ErpOrder.Ord_Number = cte_PickupStatus.OrderNumber
Left Join cte_Scenery ON tb_ErpOrder.Ord_Number = cte_Scenery.OrderNumber
order by tb_ErpOrder.Ord_Number";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
System.Data.DataTable dt = null;
try
{
// 更改参数;
Parameters.DatabaseServer = server;
Parameters.DatabaseName = dbname;
dataSet = SQLHelper.SqlHelper.ExecuteDataset(Parameters.ConnectionString, System.Data.CommandType.Text, strSql);
}
catch
{
}
stopWatch.Stop();
long ticksThisTime = stopWatch.ElapsedMilliseconds;
Console.WriteLine("{0}用时{1}", dbname, ticksThisTime);
}
}
}