使用实体框架时从CSV文件中删除/替换逗号?

时间:2014-08-20 20:38:36

标签: c# sql-server entity-framework csv

我遇到过这个问题但是我无法解决它,这让我感到疯狂。我创建了一个读取csv文件的C#应用​​程序,然后将信息插入到MSSQL中。当我这样做时,我得到了一些偏斜的插入物。一切都插入正常,直到双引号内有逗号为止。例如,如果银行名称为“Capital One,Inc”,则会将“Inc”插入下一列。我试过删除逗号,但我得到了相同的结果。我正在使用实体框架来执行此操作..这就是我的数据类的设置方式。

namespace CIT
{
    class RawData
    {
        public string Branch { get; set; }
        public string Pfx { get; set; }
        public string AcctNo { get; set; }
        public string CustName { get; set; }
        public string CtrlNo { get; set; }
        public string RefNo { get; set; }
        public string Days { get; set; }
        public string DealNoCat { get; set; }
        public string BankNameFiCat { get; set; }
        public string FinMgrName { get; set; }
        public string Desc { get; set; }
        public string DealDateCat { get; set; }
        public string SchedNo { get; set; }
        public string SchedTypeDv { get; set; }
        public string SchedRemarks { get; set; }
        public string Amt { get; set; }
        public string Src { get; set; }
        public string SysDateCat { get; set; }
        public string JrnlDateDv { get; set; }
        public string DateY4 { get; set; }
        public string DaysOut { get; set; }

        public RawData(string csvString)
        {
            string[] citData = csvString.Replace(", ", " ").Replace(".", " ").Split(',');
            try
            {
                Branch = citData[0].Replace("\"", "");
                Pfx = citData[1].Replace("\"", "");
                AcctNo = citData[2].Replace("\"", "");
                CustName = citData[3].Replace("\"", "");
                CtrlNo = citData[4].Replace("\"", "");
                RefNo = citData[5].Replace("\"", "");
                Days = citData[6].Replace("\"", "");
                DealNoCat = citData[7].Replace("\"", "");
                BankNameFiCat = citData[8].Replace("\"", "");
                FinMgrName = citData[9].Replace("\"", "");
                Desc = citData[10].Replace("\"", "");
                DealDateCat = citData[11].Replace("\"", "");
                SchedNo = citData[12].Replace("\"", "");
                SchedTypeDv = citData[13].Replace("\"", "");
                SchedRemarks = citData[14].Replace("\"", "");
                Amt = citData[15].Replace("\"", "");
                Src = citData[16].Replace("\"", "");
                SysDateCat = citData[17].Replace("\"", "");
                JrnlDateDv = citData[18].Replace("\"", "");
                DateY4 = citData[19].Replace("\"", "");
                DaysOut = null;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Something went wrong. " + ex.ToString());
            }
        }
    }
}

我也试过

  

BankNameFiCat = citData [8] .Replace(“,”,“”)。Replace(“\”“,”“);

但我没有任何运气。我认为问题是逗号之前或之后没有空格。它就像“Capital One,Inc”,就像其他银行名称一样。

这就是我将文件上传到列表然后将其写入数据库的方式..

string text = File.ReadAllText(lblFileName.Text);
string[] lines = text.Split('\n');
int total = 0, reduced = 0;
foreach (string line in lines)
{
   RawData temp = new RawData(line);
   total++;
   if (!(temp.Branch.Length == 0 || temp.Branch == "Branch"))
   {
          reduced++;
          data.Add(temp);
   }
 }

的LINQ /实体

foreach (RawData rData in data)
{

    tFIManager fimanag;
    tBank bank;
    tCustomer cust;

    fimanag = (context.tFIManagers.Any(fimanager => fimanager.FIName == rData.FinMgrName) ? context.tFIManagers.Where(fimanager => fimanager.FIName == rData.FinMgrName).FirstOrDefault() : context.tFIManagers.Add(new tFIManager { FIName = rData.FinMgrName }));

    bank = (context.tBanks.Any(banks => banks.BankName == rData.BankNameFiCat) ? context.tBanks.Where(banks => banks.BankName == rData.BankNameFiCat).FirstOrDefault() : context.tBanks.Add(new tBank { BankName = rData.BankNameFiCat }));

    cust = (context.tCustomers.Any(custs => custs.CustomerName == rData.CustName) ? context.tCustomers.Where(custs => custs.CustomerName == rData.CustName).FirstOrDefault() : context.tCustomers.Add(new tCustomer { CustomerName = rData.CustName }));

    DateTime DateY4, DealDate, SysDate, JrnlDate;
    bool hasDate = DateTime.TryParse(rData.DateY4, out DateY4);
    bool hasDeal = DateTime.TryParse(rData.DealDateCat, out DealDate);
    bool hasSys = DateTime.TryParse(rData.SysDateCat, out SysDate);
    bool hasJrnl = DateTime.TryParse(rData.JrnlDateDv, out JrnlDate);

    decimal amt;
    bool hasAmt = Decimal.TryParse(rData.Amt, out amt);

    tContractsInTransit cit = new tContractsInTransit
    {
        Branch = rData.Branch,
        Pfx = rData.Pfx,
        AcctNo = rData.AcctNo,
        CustomerID = cust.CustomerID,
        CtrlNo = rData.CtrlNo,
        RefNo = rData.RefNo,
        Days = rData.Days,
        DealNoCat = rData.DealNoCat,
        BankID = bank.BankID,
        FIManagerID = fimanag.FIManagerID,
        Desc = rData.Desc,
        DealDateCat = null,
        SchedNo = rData.SchedNo,
        SchedTypeDv = rData.SchedTypeDv,
        SchedRemarks = rData.SchedRemarks,
        Amt = hasAmt ? amt : 0,
        Src = rData.Src,
        SysDateCat = null,
        JrnlDateDv = null,
        DateY4 = null
    };

   if (hasDeal)
   {
       cit.DealDateCat = DealDate;
   }
   if (hasSys)
   {
       cit.SysDateCat = SysDate;
   }
   if (hasJrnl)
   {
       cit.JrnlDateDv = JrnlDate;
   }

   if (hasDate)
   {
       cit.DateY4 = DateY4;
   }

   context.tContractsInTransits.Add(cit);
   context.SaveChanges();
}

context.Dispose();

我不知道还有什么可以尝试......我可能只是厌倦了这一点。提前谢谢!

2 个答案:

答案 0 :(得分:0)

只需在引号中找到逗号并在执行任何其他操作之前替换它们。您可以使用this question中的一个答案中的代码。

答案 1 :(得分:0)

使用Microsoft.ACE.OLEDB.12.0读取Excel文件。这应该可以解决你的问题。

public static DataSet ReadFile(string file)
    {

        string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file + ";Extended Properties='text;HDR=YES;FMT=Delimited';";

        string sql = "select * from " + name;

        DataSet ds = null;
        Using (OleDbConnection conn = new OleDbConnection(connstring))
        {
            conn.Open();
            using (OleDbDataAdapter myCommand = new OleDbDataAdapter(strSql, connstring))
            {
                ds = new DataSet();
                myCommand.Fill(ds, "table1");
            } 
        }

        return ds;
    }