⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataimport.aspx.cs

📁 该代码的功能是:实现数据从 SQL SERVER数据导入ORACLE数据库。从而为数据的转换提供方便。
💻 CS
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Salien.Utility;
using SlnDataImp.Template;

namespace SlnDataImp.DataImp
{
	/// <summary>
	/// DataImport 的摘要说明。
	/// </summary>
	public class DataImport : System.Web.UI.Page
	{
		private Excel.Application xlApp;
		private Excel._Workbook xlWorkbook;
		private Excel._Worksheet xlWorksheet;

		private string m_strFullPath=@"C:\Inetpub\wwwroot\SlnDataImp\UpLoad\temp.xls";   //上传文件在服务器上的全路径
		//private string m_strFullPath;   //上传文件在服务器上的全路径
		private ClsTemplate template;   //模板

		#region web page controls
		protected System.Web.UI.WebControls.Label lblMsg;
		protected System.Web.UI.WebControls.Button btnExlToSwap;
		protected System.Web.UI.WebControls.Button btnUpload;
		protected System.Web.UI.WebControls.Button btnSwapToTB;
		protected System.Web.UI.WebControls.DropDownList cboTemp;
		protected System.Web.UI.WebControls.Button btnTempDetail;
		protected System.Web.UI.HtmlControls.HtmlInputFile fileBrowser;
		#endregion
	
		private void Page_Load(object sender, System.EventArgs e)
		{
			// 在此处放置用户代码以初始化页面
			this.lblMsg.Text="";
			if(ViewState["m_strFullPath"]!=null)
			{
				m_strFullPath=ViewState["m_strFullPath"].ToString();
			}
			if(!Page.IsPostBack)
			{
				FillCboTemp();
			}
		}

		#region Web 窗体设计器生成的代码
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{    
			this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
			this.btnExlToSwap.Click += new System.EventHandler(this.btnExlToSwap_Click);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion
		private void FillCboTemp()
		{
			string strSql="select * from ZX_Templet_TB";
			DataTable dt=SlnDataAccess.GetDataTable(strSql);
			foreach(DataRow row in dt.Rows)
			{
				string strTempName=row["TempName"].ToString();
				string strTempID=row["TempID"].ToString();
				ListItem item=new ListItem(strTempName,strTempID);
				cboTemp.Items.Add(item);
			}
			cboTemp.Items.Insert(0," ");
		}
		private string BuildImpTask(string strTempid)
		{
			//生成批次任务
			//ZX_ImpTask_TB
			string strSql="select SeqZX_ImpTask.nextval from dual";
			DataTable dt=SlnDataAccess.GetDataTable(strSql);
			string strImpTaskID=dt.Rows[0][0].ToString();
			string strTime=System.DateTime.Now.ToString();
			strSql="insert into ZX_ImpTask_TB(Imptaskid,Tempid,Imptaskname,Imptaskstartime)"
				+ " values(" + strImpTaskID + "," + strTempid + ",'临时任务',to_date('" 
				+ strTime + "','yyyy-mm-dd hh24:mi:ss'))";
			string strRtn=SlnDataAccess.ExecuteSQL2(strSql);
			if(strRtn=="")
			{
				return strImpTaskID;
			}
			else
			{
				return "";  //表示错误
			}
		}
		private void UpdateImpTask(string strImpTaskID,string strMsg)
		{
			#region 更新数据导入任务
			string strTime=System.DateTime.Now.ToString();
			string strSql="update ZX_ImpTask_TB set imptaskloginfo='" 
				+ strMsg + "',imptaskendtime=to_date('" 
				+ strTime + "','yyyy-mm-dd hh24:mi:ss')"
				+ " where ImpTaskID=" + strImpTaskID;
			string strRtn=SlnDataAccess.ExecuteSQL2(strSql);
			#endregion
		}
		private string GetSqlTemplate(string[] arrSwapColName,string strImpTaskID)
		{
			string strSql="insert into ZX_SWAPDATA_TB(ID,ImpTaskID,";
			foreach(string s in arrSwapColName)
			{
				if(s!=null && s!="")
				{
					strSql+=s + ",";

				}
			}
			strSql=strSql.TrimEnd(',');
			strSql+=") Values(SeqZX_SWAPDATA.nextval," + strImpTaskID + ",#VALUES#)";
			return strSql;
		}

		private void btnExlToSwap_Click(object sender, System.EventArgs e)
		{
			#region 把excel数据导入中间表
			//一行一行读起 构造成一行一行的sql
			if(cboTemp.SelectedIndex<1)
			{
				this.lblMsg.Text="必须选择一个模板";
				return;
			}
			string strTempid=cboTemp.SelectedValue;                //得到模板号

			template=new ClsTemplate(Convert.ToInt32(strTempid));  //查询得到模板相关信息

			string strImpTaskID=BuildImpTask(strTempid);            //批次id

			int intStarRowIndex=template.TempStarRow;

			string[] arrExlColName;
			string[] arrSwapColName;

			template.GetSwapInfo(out arrExlColName,out arrSwapColName);

			string strSqlTemplate=GetSqlTemplate(arrSwapColName,strImpTaskID);
			string strSql=string.Empty;

			if(!OpenExcel())
			{
				return;
			}
			string strMsg=string.Empty;
			string strValue=string.Empty;
			int i=intStarRowIndex;
			//读到完全的一个空行,则返回
			while(ReadExlRowData(i,arrExlColName,out strValue))
			{
				strSql=strSqlTemplate.Replace("#VALUES#",strValue);
				strMsg+=SlnDataAccess.ExecuteSQL2(strSql);
				i+=1;
			}
			if(strMsg=="")
			{
				strMsg="数据已经倒入中间表";
			}

			UpdateImpTask(strImpTaskID,strMsg);   //更新任务表

			this.lblMsg.Text=strMsg;
			CloseExcel();

			#endregion
		}
		private bool ReadExlRowData(int intRowIndex,string[] arrColNames,out string strValue)
		{
			//读取一行数据,用逗号分开
			bool blnRtn=false;
			strValue=string.Empty;
			int n=arrColNames.Length;
			StringBuilder sb=new StringBuilder(n*20);
			foreach(string s in arrColNames)
			{
				if(s!=null && s!="")
				{
					string strCellText=ReadExlCellData(intRowIndex,s);
					if(strCellText=="")
					{
						sb.Append("null,");
					}
					else
					{
						sb.Append("'");
						sb.Append(strCellText);
						sb.Append("',");

						blnRtn=true;   //表示该行至少有一个值,不是空行
					}
				}
			}
			strValue=sb.ToString();
			strValue=strValue.TrimEnd(',');
			return blnRtn;
		}
		private string ReadExlCellData(int intRowIndex,string strColName)
		{
			//读取一个cell的数据,如果为空 返回 null
			Excel.Range rngCell=(Excel.Range)xlWorksheet.Cells[intRowIndex,strColName];
			string strRtn=rngCell.Text.ToString().Trim();
			return strRtn;
		}
		private bool OpenExcel()
		{
			#region open the file

			string strMSG=string.Empty;

			if(m_strFullPath==null || m_strFullPath=="")
			{
				this.lblMsg.Text="请先选择需要导入的文件";
				return false;
			}

			GC.Collect();

			try
			{
				strMSG="启动excel进程";
				xlApp = new Excel.Application();
				xlApp.Visible = false;
				xlApp.DisplayAlerts = false;

				strMSG="打开指定文件[" + m_strFullPath + "]";
				xlWorkbook = (Excel._Workbook)(xlApp.Workbooks.Add(m_strFullPath));  // 获取Workbook
				xlWorksheet = (Excel._Worksheet)xlWorkbook.ActiveSheet;
			}
			catch(System.Exception ex)
			{
				CloseExcel();  //普通方法停止excel进程
				this.lblMsg.Text=strMSG + "出错:" + ex.Message;
				return false;

			}
			finally
			{
				//一定要想办法杀死启动的excel进程
			}
			return true;

			#endregion
		}
		private void CloseExcel()
		{
			if(xlWorkbook != null)
				xlWorkbook.Close(null,null,null);
			if(xlApp != null)
			{
				xlApp.Workbooks.Close();
				xlApp.Quit();
			}
			System.Runtime.InteropServices.Marshal.ReleaseComObject (xlWorksheet);
			System.Runtime.InteropServices.Marshal.ReleaseComObject (xlWorkbook);
			System.Runtime.InteropServices.Marshal.ReleaseComObject (xlApp);

			xlWorksheet=null;
			xlWorkbook=null;
			xlApp = null;
			GC.Collect();
		}

		private void btnUpload_Click(object sender, System.EventArgs e)
		{
			#region 把文件拷入临时文件夹

			string strServerPath=@"..\UpLoad\"; 
			string strFileName =fileBrowser.PostedFile.FileName;
			string strUploadFileName=string.Empty;     //文件名
			string strUploadServerPath=string.Empty;   //临时文件全路径

			if(strFileName == "")
			{
				this.lblMsg.Text = "请选择需要导出的数据文件!";
				return;
			}
			if (Path.GetExtension(strFileName)!=".xls")
			{
				this.lblMsg.Text = "请选择正确的exl数据文件!";
				return;
			}
			strUploadFileName=Path.GetFileName(strFileName);	
			strUploadServerPath=Server.MapPath(strServerPath + strUploadFileName);			
			
			if (File.Exists(strUploadServerPath))
			{
				try
				{
					File.Delete(strUploadServerPath);
				}
				catch(System.Exception ex)
				{
					string strMsg="需要上传的文件在目录中已经存在,并且在删除它时出现错误,错误信息:[" + ex.Message + "]";
					this.lblMsg.Text=strMsg;
					return;
				}
			}
			this.fileBrowser.PostedFile.SaveAs(strUploadServerPath);		//upload

			ViewState["m_strFullPath"]=strUploadServerPath;
			m_strFullPath=strUploadServerPath;

			this.lblMsg.Text="文件已经上传";
			
			#endregion
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -