读取文本文件并插入数据库
最近我司和招行有合作,招行给财务的是一个txt格式的账务文本文件,文本文件包含很多内容,对账只需要用到其中一部分内容
由此,需要操作以下几个步骤
1,上传txt文件至公司系统
2,读取需要的内容
3,将内容插入到数据库中(需要判断重复)
4,与现有订单数据进行对比
本程序只研究读取需要的内容和插入数据库
using System; using System.Data; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Text; using System.Text.RegularExpressions; using service.DAL; using System.Reflection; namespace service.fin { [Serializable] public class SettlementCmbModel { public SettlementCmbModel() { } #region Model private int _id; private string _terminalno; private DateTime? _tradetime; private string _batchno; private string _channel; private string _empowerno; private string _orderno; private string _cardno; private string _cardmark; private string _tradetype; private string _businesstype; private string _goodsno; private string _stages; private decimal? _tradeamount; private decimal? _commissionamount; private decimal? _returnfee; private decimal? _memberspoint1; private decimal? _memberspoint2; private decimal? _mpcmbpercent; private decimal? _mpvalue; private decimal? _realamount; /// <summary> /// /// </summary> public int Id { set { _id = value; } get { return _id; } } /// <summary> /// /// </summary> public string TerminalNo { set { _terminalno = value; } get { return _terminalno; } } /// <summary> /// /// </summary> public DateTime? TradeTime { set { _tradetime = value; } get { return _tradetime; } } /// <summary> /// /// </summary> public string BatchNo { set { _batchno = value; } get { return _batchno; } } /// <summary> /// /// </summary> public string Channel { set { _channel = value; } get { return _channel; } } /// <summary> /// /// </summary> public string EmpowerNo { set { _empowerno = value; } get { return _empowerno; } } /// <summary> /// /// </summary> public string OrderNo { set { _orderno = value; } get { return _orderno; } } /// <summary> /// /// </summary> public string CardNo { set { _cardno = value; } get { return _cardno; } } /// <summary> /// /// </summary> public string CardMark { set { _cardmark = value; } get { return _cardmark; } } /// <summary> /// /// </summary> public string TradeType { set { _tradetype = value; } get { return _tradetype; } } /// <summary> /// /// </summary> public string BusinessType { set { _businesstype = value; } get { return _businesstype; } } /// <summary> /// /// </summary> public string GoodsNo { set { _goodsno = value; } get { return _goodsno; } } /// <summary> /// /// </summary> public string Stages { set { _stages = value; } get { return _stages; } } /// <summary> /// /// </summary> public decimal? TradeAmount { set { _tradeamount = value; } get { return _tradeamount; } } /// <summary> /// /// </summary> public decimal? CommissionAmount { set { _commissionamount = value; } get { return _commissionamount; } } /// <summary> /// /// </summary> public decimal? ReturnFee { set { _returnfee = value; } get { return _returnfee; } } /// <summary> /// /// </summary> public decimal? MembersPoint1 { set { _memberspoint1 = value; } get { return _memberspoint1; } } /// <summary> /// /// </summary> public decimal? MembersPoint2 { set { _memberspoint2 = value; } get { return _memberspoint2; } } /// <summary> /// /// </summary> public decimal? MPCmbPercent { set { _mpcmbpercent = value; } get { return _mpcmbpercent; } } /// <summary> /// /// </summary> public decimal? MPValue { set { _mpvalue = value; } get { return _mpvalue; } } /// <summary> /// /// </summary> public decimal? RealAmount { set { _realamount = value; } get { return _realamount; } } #endregion Model } public class SettlementCmbDal { public SettlementCmbDal() { } #region 增加数据 public static int Add(SettlementCmbModel model) { StringBuilder strSql = new StringBuilder(); StringBuilder strSql1 = new StringBuilder(); StringBuilder strSql2 = new StringBuilder(); if (model.TerminalNo != null) { strSql1.Append("TerminalNo,"); strSql2.Append("'" + model.TerminalNo + "',"); } if (model.TradeTime != null) { strSql1.Append("TradeTime,"); strSql2.Append("'" + model.TradeTime + "',"); } if (model.BatchNo != null) { strSql1.Append("BatchNo,"); strSql2.Append("'" + model.BatchNo + "',"); } if (model.Channel != null) { strSql1.Append("Channel,"); strSql2.Append("'" + model.Channel + "',"); } if (model.EmpowerNo != null) { strSql1.Append("EmpowerNo,"); strSql2.Append("'" + model.EmpowerNo + "',"); } if (model.OrderNo != null) { strSql1.Append("OrderNo,"); strSql2.Append("'" + model.OrderNo + "',"); } if (model.CardNo != null) { strSql1.Append("CardNo,"); strSql2.Append("'" + model.CardNo + "',"); } if (model.CardMark != null) { strSql1.Append("CardMark,"); strSql2.Append("'" + model.CardMark + "',"); } if (model.TradeType != null) { strSql1.Append("TradeType,"); strSql2.Append("'" + model.TradeType + "',"); } if (model.BusinessType != null) { strSql1.Append("BusinessType,"); strSql2.Append("'" + model.BusinessType + "',"); } if (model.GoodsNo != null) { strSql1.Append("GoodsNo,"); strSql2.Append("'" + model.GoodsNo + "',"); } if (model.Stages != null) { strSql1.Append("Stages,"); strSql2.Append("'" + model.Stages + "',"); } if (model.TradeAmount != null) { strSql1.Append("TradeAmount,"); strSql2.Append("" + model.TradeAmount + ","); } if (model.CommissionAmount != null) { strSql1.Append("CommissionAmount,"); strSql2.Append("" + model.CommissionAmount + ","); } if (model.ReturnFee != null) { strSql1.Append("ReturnFee,"); strSql2.Append("" + model.ReturnFee + ","); } if (model.MembersPoint1 != null) { strSql1.Append("MembersPoint1,"); strSql2.Append("" + model.MembersPoint1 + ","); } if (model.MembersPoint2 != null) { strSql1.Append("MembersPoint2,"); strSql2.Append("" + model.MembersPoint2 + ","); } if (model.MPCmbPercent != null) { strSql1.Append("MPCmbPercent,"); strSql2.Append("" + model.MPCmbPercent + ","); } if (model.MPValue != null) { strSql1.Append("MPValue,"); strSql2.Append("" + model.MPValue + ","); } if (model.RealAmount != null) { strSql1.Append("RealAmount,"); strSql2.Append("" + model.RealAmount + ","); } strSql.Append("insert into CRM_Settlement_CMB("); strSql.Append(strSql1.ToString().Remove(strSql1.Length - 1)); strSql.Append(")"); strSql.Append(" values ("); strSql.Append(strSql2.ToString().Remove(strSql2.Length - 1)); strSql.Append(")"); strSql.Append(";select @@IDENTITY"); return SqlHelper.ExecuteNonQuery(strSql.ToString()); } #endregion #region 获取model public static SettlementCmbModel GetModel(DataRow dr) { SettlementCmbModel model = new SettlementCmbModel(); model.TerminalNo = dr["TerminalNo"].ToString(); if (dr["TradeTime"].ToString() != "") { model.TradeTime = DateTime.Parse(dr["TradeTime"].ToString()); } model.BatchNo = dr["BatchNo"].ToString(); model.Channel = dr["Channel"].ToString(); model.EmpowerNo = dr["EmpowerNo"].ToString(); model.OrderNo = dr["OrderNo"].ToString(); model.CardNo = dr["CardNo"].ToString(); model.CardMark = dr["CardMark"].ToString(); model.TradeType = dr["TradeType"].ToString(); model.BusinessType = dr["BusinessType"].ToString(); model.GoodsNo = dr["GoodsNo"].ToString(); model.Stages = dr["Stages"].ToString(); if (dr["TradeAmount"].ToString() != "") { model.TradeAmount = decimal.Parse(dr["TradeAmount"].ToString()); } if (dr["CommissionAmount"].ToString() != "") { model.CommissionAmount = decimal.Parse(dr["CommissionAmount"].ToString()); } if (dr["ReturnFee"].ToString() != "") { model.ReturnFee = decimal.Parse(dr["ReturnFee"].ToString()); } if (dr["MembersPoint1"].ToString() != "") { model.MembersPoint1 = decimal.Parse(dr["MembersPoint1"].ToString()); } if (dr["MembersPoint2"].ToString() != "") { model.MembersPoint2 = decimal.Parse(dr["MembersPoint2"].ToString()); } if (dr["MPCmbPercent"].ToString() != "") { model.MPCmbPercent = decimal.Parse(dr["MPCmbPercent"].ToString()); } if (dr["MPValue"].ToString() != "") { model.MPValue = decimal.Parse(dr["MPValue"].ToString()); } if (dr["RealAmount"].ToString() != "") { model.RealAmount = decimal.Parse(dr["RealAmount"].ToString()); } return model; } #endregion } public partial class ReadTxt : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void txtInput() { //反射的方法获取字段 SettlementCmbModel model = new SettlementCmbModel(); PropertyInfo[] obj = model.GetType().GetProperties(); DataTable dt = new DataTable(); foreach (PropertyInfo p in obj) { dt.Columns.Add(p.Name); } //构造DataRow StreamReader sr = new StreamReader(Server.MapPath("text.txt"), System.Text.Encoding.GetEncoding("GB2312")); while (!sr.EndOfStream) { string s = sr.ReadLine(); if (s.StartsWith(" NET")) { s = s.Trim(); s = s.Replace("- ", "-"); string[] ss = s.Split(' '); object[] datarow = new object[dt.Columns.Count]; int i = 0; foreach (string st in ss) { if (st != "") { datarow[i] = st; i++; } } dt.Rows.Add(datarow); } } sr.Close(); //执行插入数据库动作 int j = 0; foreach (DataRow dr in dt.Rows) { SettlementCmbModel _model = SettlementCmbDal.GetModel(dr); //处理交易时间导入时出现在问题 string s = _model.TerminalNo; int year = int.Parse(s.Substring(0, 4)); int month = int.Parse(s.Substring(4, 2)); int day = int.Parse(s.Substring(6, 2)); string st = _model.TradeTime.ToString(); string[] str = st.Split(' '); string[] stri = str[1].Split(':'); int hour = int.Parse(stri[0]); int minute = int.Parse(stri[1]); int second = int.Parse(stri[2]); DateTime de = new DateTime(year, month, day, hour, minute, second); _model.TradeTime = de; _model.TerminalNo = "NET"; //订单号头加一个0 _model.OrderNo = "0" + _model.OrderNo; if (SqlHelper.GetRecordCount("CRM_Settlement_CMB", " OrderNo like '" + _model.OrderNo + "'") ==0) { j += SettlementCmbDal.Add(_model); } } this.Literal1.Text = "成功更新" + j + "行"; //StringBuilder sb = new StringBuilder(); //sb.Append("<table>"); //foreach (DataRow dr in dt.Rows) //{ // sb.Append("<tr>"); // foreach (DataColumn dc in dt.Columns) // { // sb.Append("<td>" + dr[dc.ColumnName].ToString() + "</td>"); // } // sb.Append("</tr>"); //} //sb.Append("</table>"); //this.Literal1.Text = sb.ToString(); } } }
思路是读取txt,然后构造DataTable,然后由反射方式取得model,再插入数据库,本例为方便说明,将几个类放在一个
页中,有更牛比的方法请指教,谢谢
作者:黑曜石
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述