WYB
2021-04-23 f61def9df2fc06930393e443bb50f002734318aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.IO;
using System.IO.Compression;
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//class  SqlReportData 产生提供给报表生成需要的 或 JSON 数据
public class SqlReportData
{
    //★特别提示★:
    //连接SQL Server数据库的连接串,应该修改为与实际一致。如果是运行Grid++Report本身的例子,应该首先附加例子数据库到
    //SQL Server2000/2005数据库上。
    //public const string SqlConnStr = "Data Source=(local);Initial Catalog=gridreport;Persist Security Info=True;User ID=sa;Password=;";
 
    //public const string SqlConnStr = "Data Source=10.0.2.9;Initial Catalog=HX_LimsSys;Persist Security Info=True;User ID=HX_USER;Password=lc@841022;";
    public const string SqlConnStr = "Data Source=.;Initial Catalog=HX_LMESsys;Persist Security Info=True;User ID=HX_USER;Password=lc@841022;";
 
    //public string sServer;
    //public string sDataBase;
    //public string sUser;
    //public string sPassword;
    //public const string SqlConnStr="";
    //protected void Page_Load(object sender, EventArgs e)
    //{
    //    sServer = Pub_Class.ClsIni.ReadIni("Erp", "Server", Pub_Class.ClsPub.AppPath + @"\" + "HXErp.ini");
    //    sDataBase = Pub_Class.ClsIni.ReadIni("Erp", "DataBase", Pub_Class.ClsPub.AppPath + @"\" + "HXErp.ini");
    //    sUser = Pub_Class.ClsIni.ReadIni("Erp", "UserName", Pub_Class.ClsPub.AppPath + @"\" + "HXErp.ini");
    //    sPassword = Pub_Class.ClsIni.ReadIni("Erp", "PassWord", Pub_Class.ClsPub.AppPath + @"\" + "HXErp.ini"); 
    //    SqlConnStr = "Data Source=" + sServer +
    //                                ";Initial Catalog=" + sDataBase +
    //                                ";Persist Security Info=True;"+
    //                                "User ID=" + sUser +
    //                                ";Password=" + sPassword + ";";
    //}
 
    //定义在SQL中表示日期值的包围符号,Access用“#”, 而MS SQl Server用“'”,为了生成两者都可用的查询SQL语句,将其参数化定义出来。这样处理只是为了演示例子方便
    public const char DateSqlBracketChar = '\'';
 
    //根据查询SQL,产生提供给报表生成需要的 XML 数据,字段值为空也产生数据
    public static void FullGenNodeXmlData(System.Web.UI.Page DataPage, string QuerySQL, bool ToCompress)
    {
        SqlConnection ReportConn = new SqlConnection(SqlConnStr);
        SqlCommand ReportDataCommand = new SqlCommand(QuerySQL, ReportConn);
        ReportConn.Open();
        SqlDataReader ReportDataReader = ReportDataCommand.ExecuteReader();
        XMLReportData.GenNodeXmlDataFromReader(DataPage, ReportDataReader, ToCompress ? ResponseDataType.ZipBinary : ResponseDataType.PlainText);
        ReportDataReader.Close();
        ReportConn.Close();
    }
 
    //获取 Count(*) SQL 查询到的数据行数。参数 QuerySQL 指定获取报表数据的查询SQL
    public static int BatchGetDataCount(string QuerySQL)
    {
        int Total = 0;
 
        SqlConnection ReportConn = new SqlConnection(SqlConnStr);
        SqlCommand ReportDataCommand = new SqlCommand(QuerySQL, ReportConn);
        ReportConn.Open();
        SqlDataReader ReportDataReader = ReportDataCommand.ExecuteReader();
        if (ReportDataReader.Read())
            Total = ReportDataReader.GetInt32(0);
        ReportDataReader.Close();
        ReportConn.Close();
 
        return Total;
    }
 
    //<<protected function
    //根据查询SQL,产生提供给报表生成需要的 XML 或 JSON 数据
    protected static void DoGenDetailData(System.Web.UI.Page DataPage, string QuerySQL, ResponseDataType DataType, bool IsJSON)
    {
        SqlConnection ReportConn = new SqlConnection(SqlConnStr);
        SqlDataAdapter ReportDataAdapter = new SqlDataAdapter(QuerySQL, ReportConn);
        DataSet ReportDataSet = new DataSet();
        ReportConn.Open();
        ReportDataAdapter.Fill(ReportDataSet);
        ReportConn.Close();
 
        if (IsJSON)
            JSONReportData.GenDataSet(DataPage, ReportDataSet, DataType);
        else
            XMLReportData.GenDataSet(DataPage, ReportDataSet, DataType);
    }
    //>>protected function
 
    //特别提示:以下函数为兼容以前版本而保留,请勿再用之,无须兼容考虑可删除之
    //<<保留前面版本的函数,兼容以前版本所写程序
    //根据查询SQL,产生提供给报表生成需要的 XML 数据,采用 Sql 数据引擎
    public static void GenNodeXmlData(System.Web.UI.Page DataPage, string QuerySQL, bool ToCompress)
    {
        DoGenDetailData(DataPage, QuerySQL, ToCompress ? ResponseDataType.ZipBinary : ResponseDataType.PlainText, false);
    }
 
    //根据查询SQL,产生提供给报表生成需要的 XML 数据,采用 Sql 数据引擎, 这里只产生报表参数数据
    //当报表没有明细时,调用本方法生成数据,查询SQL应该只能查询出一条记录
    public static void GenParameterReportData(System.Web.UI.Page DataPage, string ParameterQuerySQL)
    {
        DoGenDetailData(DataPage, ParameterQuerySQL, ResponseDataType.PlainText, false);
    }
 
    //根据查询SQL,产生提供给报表生成需要的 XML 数据,采用 Sql 数据引擎, 根据RecordsetQuerySQL获取报表明细数据,根据ParameterQuerySQL获取报表参数数据
    public static void GenEntireReportData(System.Web.UI.Page DataPage, string RecordsetQuerySQL, string ParameterQuerySQL, bool ToCompress)
    {
        SqlConnection ReportConn = new SqlConnection(SqlConnStr);
        DataSet ReportDataSet = new DataSet();
        ReportConn.Open();
        SqlDataAdapter DataAdapter1 = new SqlDataAdapter(RecordsetQuerySQL, ReportConn);
        DataAdapter1.Fill(ReportDataSet, "Detail");
        SqlDataAdapter DataAdapter2 = new SqlDataAdapter(ParameterQuerySQL, ReportConn);
        DataAdapter2.Fill(ReportDataSet, "Master");
        ReportConn.Close();
        XMLReportData.GenDataSet(DataPage, ReportDataSet, ReportDataBase.DefaultDataType);
    }
    //>>保留前面版本的函数,兼容以前版本所写程序
}
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//class  SqlXMLReportData 根据SQL产生报表需要的 XML 数据,采用 Sql 数据引擎
public class SqlXMLReportData : SqlReportData
{
    public static void GenOneRecordset(System.Web.UI.Page DataPage, string QuerySQL)
    {
        SqlReportData.DoGenDetailData(DataPage, QuerySQL, ReportDataBase.DefaultDataType, false);
    }
 
    public static void GenMultiRecordset(System.Web.UI.Page DataPage, ArrayList QueryList)
    {
        SqlConnection ReportConn = new SqlConnection(SqlConnStr);
        DataSet ReportDataSet = new DataSet();
 
        ReportConn.Open();
 
        foreach (ReportQueryItem item in QueryList)
        {
            SqlDataAdapter DataAdapter = new SqlDataAdapter(item.QuerySQL, ReportConn);
            DataAdapter.Fill(ReportDataSet, item.RecordsetName);
        }
 
        ReportConn.Close();
 
        XMLReportData.GenDataSet(DataPage, ReportDataSet, ReportDataBase.DefaultDataType);
    }
 
    //特别提示:以下函数为兼容以前版本而保留,请勿再用之,无须兼容考虑可删除之
    //<<保留前面版本的函数,兼容以前版本所写程序
    //产生报表明细记录数据,数据将被加载到明细网格的记录集中
    public static void GenDetailData(System.Web.UI.Page DataPage, string QuerySQL)
    {
        GenOneRecordset(DataPage, QuerySQL);
    }
 
    //这里只产生报表参数数据,数据加载到报表参数、非明细网格中的部件框中
    //当报表没有明细时,调用本方法生成数据,查询SQL应该只能查询出一条记录
    public static void GenParameterData(System.Web.UI.Page DataPage, string ParameterQuerySQL)
    {
        GenOneRecordset(DataPage, ParameterQuerySQL);
    }
 
    //根据RecordsetQuerySQL获取报表明细数据,对应数据加载到报表的明细网格的记录集中
    //根据ParameterQuerySQL获取报表参数数据,对应数据加载到报表参数、非明细网格中的部件框中
    public static void GenEntireData(System.Web.UI.Page DataPage, string RecordsetQuerySQL, string ParameterQuerySQL, ResponseDataType DataType)
    {
        ArrayList QueryList = new ArrayList();
        QueryList.Add(new ReportQueryItem(RecordsetQuerySQL, "Detail"));
        QueryList.Add(new ReportQueryItem(ParameterQuerySQL, "Master"));
        GenMultiRecordset(DataPage, QueryList);
    }
    public static void GenEntireData(System.Web.UI.Page DataPage, string RecordsetQuerySQL, string ParameterQuerySQL)
    {
        GenEntireData(DataPage, RecordsetQuerySQL, ParameterQuerySQL, ReportDataBase.DefaultDataType);
    }
    //>>保留前面版本的函数,兼容以前版本所写程序
}
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//class  SqlJsonReportData 根据SQL产生报表需要的 JSON 数据,采用 Sql 数据引擎
public class SqlJsonReportData : SqlReportData
{
    public static void GenOneRecordset(System.Web.UI.Page DataPage, string QuerySQL)
    {
        SqlReportData.DoGenDetailData(DataPage, QuerySQL, ReportDataBase.DefaultDataType, true);
    }
 
    public static void GenMultiRecordset(System.Web.UI.Page DataPage, ArrayList QueryList)
    {
        SqlConnection ReportConn = new SqlConnection(SqlConnStr);
        DataSet ReportDataSet = new DataSet();
 
        ReportConn.Open();
 
        foreach (ReportQueryItem item in QueryList)
        {
            SqlDataAdapter DataAdapter = new SqlDataAdapter(item.QuerySQL, ReportConn);
            DataAdapter.Fill(ReportDataSet, item.RecordsetName);
        }
 
        ReportConn.Close();
 
        JSONReportData.GenDataSet(DataPage, ReportDataSet, ReportDataBase.DefaultDataType);
    }
 
 
    //特别提示:以下函数为兼容以前版本而保留,请勿再用之,无须兼容考虑可删除之
    //<<保留前面版本的函数,兼容以前版本所写程序
    //产生报表明细记录数据,数据将被加载到明细网格的记录集中
    public static void GenDetailData(System.Web.UI.Page DataPage, string QuerySQL)
    {
        GenOneRecordset(DataPage, QuerySQL);
    }
 
    //这里只产生报表参数数据,数据将加载到报表参数、非明细网格中的部件框中
    //当报表没有明细时,调用本方法生成数据,查询SQL应该只能查询出一条记录
    public static void GenParameterData(System.Web.UI.Page DataPage, string ParameterQuerySQL)
    {
        GenOneRecordset(DataPage, ParameterQuerySQL);
    }
 
    //根据RecordsetQuerySQL获取报表明细数据,对应数据加载到报表的明细网格的记录集中
    //根据ParameterQuerySQL获取报表参数数据,对应数据加载到报表参数、非明细网格中的部件框中
    public static void GenEntireData(System.Web.UI.Page DataPage, string RecordsetQuerySQL, string ParameterQuerySQL, ResponseDataType DataType)
    {
        ArrayList QueryList = new ArrayList();
        QueryList.Add(new ReportQueryItem(RecordsetQuerySQL, "Detail"));
        QueryList.Add(new ReportQueryItem(ParameterQuerySQL, "Master"));
        GenMultiRecordset(DataPage, QueryList);
    }
    public static void GenEntireData(System.Web.UI.Page DataPage, string RecordsetQuerySQL, string ParameterQuerySQL)
    {
        GenEntireData(DataPage, RecordsetQuerySQL, ParameterQuerySQL, ReportDataBase.DefaultDataType);
    }
    //>>保留前面版本的函数,兼容以前版本所写程序
}