1 ///c#
2
3
4 using System;
5 using System.Collections.Generic;
6 using System.Linq;
7 using System.Web;
8 using System.Web.UI;
9 using System.Web.UI.WebControls;
10 using System.IO;
11 using CompIntelligenceWeb.User;
12
13 using System.Data.OleDb;
14 using System.Data;
15 using System.Data.SqlClient;
16 using System.Text;
17 using Microsoft.ApplicationBlocks.Data;
18
19 namespace PRCSales_external.Store
20 {
21 public partial class XoemStoreSR_AsignUpdate : PageBase
22 {
23 protected OleDbConnection xlconn;
24 protected OleDbDataAdapter xlda;
25 protected DataTable Err_dt;
26 protected string tableName;
27 protected string WWID;
28
29 public string connString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
30
31 protected void Page_Load(object sender, EventArgs e)
32 {
33 this.btnUpload.Attributes.Add("onclick", "ShowWaiting();");
34 if (!IsPostBack)
35 {
36 WWID = ((AccessControler)this.Session["_accessctrl"]).GetWWID();
37
38 initTable();
39 bindNextPage(0);
40 }
41 tableName = ViewState["TableName"].ToString();
42 Err_dt = (DataTable)ViewState["table"];
43
44 }
45
46 private void bindNextPage(int p)
47 {
48 tableName = ViewState["TableName"].ToString();
49 Err_dt = (DataTable)ViewState["table"];
50 if (ViewState["Sort"].ToString() != "")
51 {
52 DataView dv = new DataView(Err_dt);
53 dv.Sort = ViewState["Sort"].ToString();
54 GridMain.DataSource = dv;
55 }
56 else
57 {
58 GridMain.DataSource = Err_dt;
59 }
60 GridMain.CurrentPageIndex = p;
61 GridMain.DataBind();
62 }
63
64 protected void GridMain_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
65 {
66 currentPageIndex = e.NewPageIndex;
67 this.GridMain.CurrentPageIndex = currentPageIndex;
68 GridMain.DataSource = Err_dt;
69 GridMain.DataBind();
70 }
71
72 protected int currentPageIndex
73 {
74 set
75 {
76 ViewState["currentPageIndex"] = value;
77 }
78 get
79 {
80 if (ViewState["currentPageIndex"] != null)
81 {
82 return int.Parse(ViewState["currentPageIndex"].ToString());
83 }
84 else
85 {
86 return 0;
87 }
88 }
89 }
90
91
92 private void initTable()
93 {
94 tableName = "XoemStoreSR_AsignUpdate" + DateTime.UtcNow.ToString();
95 Err_dt = new DataTable(tableName);
96 ViewState["TableName"] = tableName;
97 ViewState["table"] = Err_dt;
98 ViewState["Sort"] = "";
99 }
100 /// <summary>
101 /// 通过excel导入数据进入临时物理表
102 /// </summary>
103 /// <param name="sender"></param>
104 /// <param name="e"></param>
105 protected void btnUpload_Click(object sender, EventArgs e)
106 {
107 if (this.myFile.PostedFile.FileName.Trim() == "")
108 {
109 string msg = "请选择文件";
110 Response.Write("<script type='text/javascript'> alert('" + msg + "');</script>");
111 return;
112 }
113 //验证文件格式
114 string ext = this.myFile.PostedFile.FileName.Substring(this.myFile.PostedFile.FileName.LastIndexOf(".")).ToLower();
115 if (ext != ".xls" && ext != ".xlsx")
116 {
117 string msg = "文件格式错误!";
118 this.PageAlert(msg);
119 return;
120 }
121 if (!Directory.Exists(Server.MapPath("upload")))
122 {
123 Directory.CreateDirectory(Server.MapPath("upload"));
124 }
125 //文件路径
126 string aFile = this.myFile.PostedFile.FileName.ToString();
127 //文件名
128 string aFirstName = aFile.Substring(aFile.LastIndexOf("\") + 1, (aFile.LastIndexOf(".") - aFile.LastIndexOf("\") - 1));
129
130 string fileNO = System.DateTime.Now.Year.ToString("00") + System.DateTime.Now.Month.ToString("00") + System.DateTime.Now.Day.ToString("00") + System.DateTime.Now.Hour.ToString("00") + System.DateTime.Now.Minute.ToString("00") + System.DateTime.Now.Second.ToString("00") + "_" + WWID;
131
132
133 //临时存放
134 string sFileSavePath = Server.MapPath("upload") + "\" + fileNO + ext;
135 //保存文件
136 this.myFile.PostedFile.SaveAs(sFileSavePath);
137 DataSet dt = new DataSet();
138 try
139 {
140 if (ext == ".xls")
141 {
142 xlconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + sFileSavePath + "';Extended Properties="Excel 8.0;HDR=YES;IMEX=1"");
143 }
144 else
145 {
146 xlconn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + sFileSavePath + "';Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1"");
147 }
148 }
149 catch (Exception ex)
150 {
151 this.PageAlert(ex.Message);
152 return;
153 }
154 string sheetName = "店面SR模板";
155 try
156 {
157 //获取数据保存到DataSet
158 xlda = new OleDbDataAdapter("select * from [" + sheetName + "$]", xlconn);
159 xlda.Fill(dt);
160 }
161 catch
162 {
163 Response.Write("<script type='text/javascript'> alert('请核对模板是否正确!');</script>");
164 errData.Text = "";
165 return;
166 }
167 finally
168 {
169 xlconn.Close();
170 xlda.Dispose();
171 }
172 SqlConnection conn = new SqlConnection(connString);
173 SqlCommand cmd = new SqlCommand();
174 cmd.CommandType = CommandType.Text;
175 cmd.Connection = conn;
176
177
178 try
179 {
180 int count = dt.Tables[0].Rows.Count;
181 int number = 1;
182 if (CheckTemplate(dt.Tables[0]))
183 {
184 StringBuilder sql = new StringBuilder();
185 sql.Append("set NOCOUNT ON" + "
");
186 sql.Append("INSERT INTO prc_xoem_stor_sr_data_raw (stor_id,slsprs_id,slsprs_nm,lst_upt_dtm)
");
187
188 foreach (DataRow dr in dt.Tables[0].Rows)
189 {
190 string stor_id = "'" + dr[0].ToString().Trim() + "'";
191 string slsprs_id = "'" + dr[1].ToString().Trim() + "'";
192 string slsprs_nm = "'" + dr[2].ToString().Trim() + "'";
193 string upload_tm = "'" + DateTime.Now.ToString("yyyy-MM-dd") + "'";
194
195
196
197 if (number == count)
198 {
199 sql.Append("select" + stor_id + "," + slsprs_id + "," + slsprs_nm + "," + upload_tm + "
");
200 }
201 else
202 {
203 sql.Append("select" + stor_id + "," + slsprs_id + "," + slsprs_nm + "," + upload_tm + "UNION ALL" + "
");
204 }
205
206
207 number++;
208 }
209 sql.Append("set NOCOUNT OFF" + "
");
210 conn.Open();
211 cmd.CommandTimeout = 300;
212 cmd.CommandText = sql.ToString();
213 cmd.ExecuteNonQuery();
214 }
215 else
216 {
217 this.PageAlert("上传失败");
218 errData.Text = "";
219 return;
220 }
221 }
222 catch (Exception ex)
223 {
224 this.PageAlert(ex.Message);
225 return;
226 }
227 finally
228 {
229 conn.Close();
230 cmd.Dispose();
231 }
232
233 //执行脚本导入数
234 ExcuteProcedure();
235
236 //返回错误数据
237 BindERData();
238
239 //防止缓存
240 //Session.Remove(tableName);
241 ViewState["table"] = null;
242 ViewState["table"] = Err_dt;
243
244 if (Err_dt != null)
245 {
246 errData.Text = string.Format("{0}", int.Parse(Err_dt.Rows.Count.ToString()));
247 }
248 else
249 {
250 errData.Text = string.Format("{0}", 0);
251 }
252
253 int successCount = dt.Tables[0].Rows.Count - Err_dt.Rows.Count;
254 this.PageAlert("更新成功" + successCount + "条,失败" + errData.Text + "条。");
255
256
257
258
259 }
260
261 private void BindERData()
262 {
263 SqlConnection conn = new SqlConnection(connString);
264 StringBuilder sql = new StringBuilder();
265 sql.Append("select a.Category+':'+a.Remark as errorMsg, b.* INTO #stor_sr FROM prc_xoem_stor_sr_data_log a");
266 sql.Append(" INNER JOIN prc_xoem_stor_sr_data_raw b ON a.data_id=b.id WHERE a.errorFlag=0 AND a.Category='导入失败'");
267 sql.Append(" UPDATE prc_xoem_stor_sr_data_log SET errorFlag=1 WHERE Category='导入失败'");
268 sql.Append(" SELECT * FROM #stor_sr");
269 try
270 {
271 conn.Open();
272 Err_dt = SqlHelper.ExecuteDataset(conn, CommandType.Text, sql.ToString()).Tables[0];
273 GridMain.DataSource = Err_dt;
274 GridMain.DataBind();
275 }
276 catch (Exception ex)
277 {
278 this.PageAlert(ex.Message);
279 Err_dt = null;
280 GridMain.DataSource = Err_dt;
281 GridMain.DataBind();
282 }
283 finally
284 {
285 conn.Close();
286 }
287
288 }
289 /// <summary>
290 /// 执行更新店面SR
291 /// </summary>
292 private void ExcuteProcedure()
293 {
294 SqlConnection conn = new SqlConnection(connString);
295 SqlCommand cmd = new SqlCommand();
296 cmd.CommandTimeout = 6000000;
297 cmd.CommandText = "prc_xoem_stor_sr_update";
298 cmd.CommandType = CommandType.StoredProcedure;
299 cmd.Connection = conn;
300
301 string update_dtm = DateTime.Now.ToString("yyyy-MM-dd");
302 try
303 {
304 cmd.Parameters.AddWithValue("@yyyydd", update_dtm);
305 conn.Open();
306 cmd.ExecuteNonQuery();
307 }
308 catch (Exception ex)
309 {
310 this.PageAlert(ex.Message);
311 }
312 finally
313 {
314 conn.Close();
315 cmd.Dispose();
316 }
317
318
319 }
320 /// <summary>
321 /// 验证模板列名是否正确
322 /// </summary>
323 /// <param name="dataTable"></param>
324 /// <returns></returns>
325 private bool CheckTemplate(DataTable dt)
326 {
327 bool boolResult = true;
328 string msg = string.Empty;
329 List<string> list = new List<string>();
330 for (int i = 0; i < dt.Columns.Count; i++)
331 {
332 list.Add(dt.Columns[i].ColumnName);
333 }
334 try
335 {
336 if (list[0].ToString().Trim() != "Store ID")
337 {
338 msg = "第 A 列应该为: Store ID";
339 this.PageAlert(msg);
340 boolResult = false;
341 }
342 if (list[1].ToString().Trim() != "SR ID")
343 {
344 msg = "第 B 列应该为:SR ID";
345 this.PageAlert(msg);
346 boolResult = false;
347 }
348 if (list[2].ToString().Trim() != "SR Name")
349 {
350 msg = "第 C 列应该为:SR Name";
351 this.PageAlert(msg);
352 boolResult = false;
353 }
354 }
355 catch
356 {
357 this.PageAlert("请核对模板是否正确");
358 boolResult = false;
359 }
360 return boolResult;
361 }
362
363
364 protected void btnExport_Click(object sender, EventArgs e)
365 {
366 GridMain.AllowPaging = false;
367 GridMain.AllowSorting = false;
368
369 bindNextPage(0);
370
371 Export(GridMain, "StoreSRErrorList.xls", "StoreSRErrorList", "application/ms-excel");
372
373 GridMain.AllowPaging = true;
374 GridMain.AllowSorting = false;
375
376 }
377
378 #region Export to the excel
379
380
381 // Export to the excel
382 private void Export(System.Web.UI.WebControls.DataGrid dg, string fileName, string fn, string typeName)
383 {
384 System.Web.HttpResponse httpResponse = Page.Response;
385 httpResponse.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
386 httpResponse.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
387 httpResponse.ContentType = typeName;
388 System.IO.StringWriter tw = new System.IO.StringWriter();
389 System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
390 dg.RenderControl(hw);
391
392 //httpResponse.Write(tw.ToString());
393 //httpResponse.End();
394 string filePath = Server.MapPath("..") + fn + DateTime.Now.Ticks.ToString() + new Random().Next(100).ToString();
395 System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
396 sw.Write(tw.ToString());
397 sw.Close();
398 DownFile(httpResponse, fileName, filePath);
399
400 httpResponse.End();
401 }
402
403 private bool DownFile(System.Web.HttpResponse Response, string fileName, string fullPath)
404 {
405 System.IO.FileStream fs = System.IO.File.OpenRead(fullPath);
406 try
407 {
408 Response.ContentType = "application/octet-stream";
409
410 Response.AppendHeader("Content-Disposition", "attachment;filename=" +
411 HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ";charset=GB2312");
412 //System.IO.FileStream fs = System.IO.File.OpenRead(fullPath);
413 long fLen = fs.Length;
414 int size = 102400;//每100K同时下载数据
415 byte[] readData = new byte[size];//指定缓冲区的大小
416 if (size > fLen) size = Convert.ToInt32(fLen);
417 long fPos = 0;
418 bool isEnd = false;
419 while (!isEnd)
420 {
421 if ((fPos + size) > fLen)
422 {
423 size = Convert.ToInt32(fLen - fPos);
424 readData = new byte[size];
425 isEnd = true;
426 }
427 fs.Read(readData, 0, size);//读入一个压缩块
428 Response.BinaryWrite(readData);
429 fPos += size;
430 }
431 fs.Close();
432 FileInfo FI = new FileInfo(fullPath);
433 if (FI.Exists)
434 {
435 FI.Delete();
436 }
437 return true;
438 }
439 catch
440 {
441 return false;
442 }
443 finally
444 {
445 fs.Close();
446 }
447 }
448
449 #endregion
450
451
452
453 /// <summary>
454 /// 提示代码
455 /// </summary>
456 /// <param name="msg"></param>
457 private void PageAlert(string msg)
458 {
459 this.Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "<script type='text/javascript'> alert('" + msg + "') </script>");
460 }
461
462 protected void GridMain_SelectedIndexChanged(object sender, EventArgs e)
463 {
464
465 }
466
467
468 }
469 }