2014-01-28 3 views
0

Я работаю над проектом C#, который будет использоваться для чтения значений из таблицы Excel, очистите значения, чтобы убедиться, что данные верны, а затем вставьте указанные значения в таблица базы данных. Это говорит о том, что я также довольно новичок в C# (это мой первый «большой» проект), поэтому с помощью коллектива у нас есть два из трех требований, закодированных.Вставить значения классов в базу данных SQL с помощью C#

С учетом этого фона , у меня возникли проблемы с вызовом класс, который имеет значения, сохраненные таким образом я могу вставить их в нужную таблицу Вот код, который я до сих пор:.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using Microsoft.Office.Interop.Excel; 
using System.Text.RegularExpressions; 

namespace ReadExcel 
{ 
    public partial class Form1 : Form 
    { 
    public Microsoft.Office.Interop.Excel._Application excelApp = new Microsoft.Office.Interop.Excel.Application() { DisplayAlerts = false, Visible = false }; 

    public List<Attorney> listOfAttys = Helpers.getAttorneys(); 
    public List<LegalTransactionRec> listofTransactions = Helpers.insertRecords(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     setAttyList(); 
    } 


    private void setAttyList() 
    { 
     foreach (var item in listOfAttys.Select(x => x.Caption)) 
      cmbAtty.Items.Add(item); 


    } 


    public void btnRun_Click(object sender, EventArgs e) 
    { 
     Workbook workbook = excelApp.Workbooks.Open(txtbxFilename.Text); 

     try 
     { 

      Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1); 
      Microsoft.Office.Interop.Excel.Range xlRange = worksheet.UsedRange; 

      int rowCount = xlRange.Rows.Count; 
      int colCount = xlRange.Columns.Count; 

      List<LegalTransactionRec> lstTran = new List<LegalTransactionRec>(); 


       for (int i = 1; i <= rowCount; i++) 
       { 
        for (int j = 1; j <= colCount; j++) 
        { 
         lstTran.Add(new LegalTransactionRec() 
         { 

          AccountNumber = CleanString(xlRange.Cells[i, 1].Value2.ToString()), 
          CostAmount = TryToParse(CleanAmount(xlRange.Cells[i, 3].Value2.ToString())), 
          SSN = CleanString(xlRange.Cells[i, 6].Value2.ToString()), 
          TransactionDate = CheckDate(xlRange.Cells[i, 2].Value2.ToDate()), 
          Description = xlRange.Cells[i, 8].Value2.ToString(), 
          TransactionCode = CheckNull(xlRange.Cells[i, 2].Value2.ToInt()) 
         }); 
        } 
       } 

      if (validateHeader(worksheet)) 
      { 




      } 
     } 
     catch (Exception ex) 
     { 
     } 


     excelApp.Quit(); 
    } 

    private void btnLoad_Click(object sender, EventArgs e) 
    { 
     txtbxFilename.Text = null; 

     System.IO.Stream myStream = null; 
     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

     openFileDialog1.InitialDirectory = "C:\\"; 
     openFileDialog1.Filter = "Excel files (*.xlsx)|*.xlsx"; 
     openFileDialog1.FilterIndex = 2; 
     openFileDialog1.RestoreDirectory = true; 

     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       if ((myStream = openFileDialog1.OpenFile()) != null) 
       { 
        txtbxFilename.Text = openFileDialog1.FileName; 
        myStream.Close(); 
        myStream.Dispose(); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); 
      } 
     } 
    } 


    private bool validateHeader(Microsoft.Office.Interop.Excel.Worksheet Worksheet) 
    { 
     if (Worksheet == null) 
      return false; 

     bool isValid = false; 

     //get header row 
     //check all cell values 

     return isValid; 
    } 

    public int CheckNull(int intVal) 
    { 
     int cleanValue; 
     if (intVal == null) 
     { 
      throw new System.ArgumentException("Value cannot be null", "original"); 
     } 
     else 
     { 
      cleanValue = intVal; 
     } 

     return cleanValue; 
    } 

    public string CleanString(String strVal) 
    { 
     string cleanValue; 
     if (strVal == null) 
     { 
      throw new System.ArgumentException("Value cannot be null", "original"); 
     } 
     else 
     { 
      cleanValue = Regex.Replace(strVal," ", "").Replace("$","").Replace("-",""); 
     } 

     return cleanValue; 
    } 

    public string CleanAmount(String amt) 
    { 
     string cleanAmt; 
     if (amt == null) 
     { 
      throw new System.ArgumentException("Value cannot be null", "original"); 
     } 
     else 
     { 
      cleanAmt = Regex.Replace(amt, "(", "-").Replace(")", "").Replace("$","").Replace("[^0-9]+", "").Replace(" ",""); 
     } 
     return cleanAmt; 
    } 

    public static void TryToParse(string strAmt) 
    { 
     decimal decAmt; 

     bool result = Decimal.TryParse(strAmt, out decAmt); 

    } 

    public DateTime CheckDate(DateTime tranDate) 
    { 
     DateTime date; 

     if (tranDate == null) 
     { 
      throw new System.ArgumentException("Value cannot be null", "original"); 
     } 
     else 
     { 
      date = tranDate; 
     } 

     return date; 
    } 

} 

public class Attorney 
{ 
    public string AttorneyID { get; set; } 
    public int OrganizationID { get; set; } 
    public string AttorneyName { get; set; } 
    public string Caption { get; set; } 
} 

public class LegalTransactionRec 
{ 
    public string AccountNumber { get; set; } 
    public string CostAmount { get; set; } 
    public string SSN { get; set; } 
    public int BatchID { get; set; } 
    public Attorney Attorney { get; set; } 
    public DateTime TransactionDate { get; set; } 
    public string Description { get; set; } 
    public int TransactionCode { get; set; } 
} 


public class ReviewOutput 
{ 
} 

public class ApprovedOutput 
{ 
} 

} 

Вот другая часть:

EDIT: я добавил код до начала инструкции insert, я решил, что могу использовать DataRows, например, мой коллега, когда он создал select statement. Моя проблема сейчас заключается в том, чтобы выяснить, как указать мой класс, который содержит значения, которые мне нужно вставить.

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ReadExcel 
{ 
    class Helpers 
    { 

    public static List<Attorney> getAttorneys() 
    { 
     List<Attorney> lst = new List<Attorney>(); 

     StringBuilder sql = new StringBuilder(); 
     sql.AppendLine("SELECT "); 
     sql.AppendLine(" V.ATTORNEY_ID, V.ORGANIZATION_ID, A.NAME, ('(' || V.ATTORNEY_ID || ') - ' || a.name) as caption"); 
     sql.AppendLine("FROM "); 
     sql.AppendLine(" VENDOR_PORTAL.organization_attys V, ATLAS.RLGLENTY A "); 
     sql.AppendLine("WHERE "); 
     sql.AppendLine(" V.ATTORNEY_ID = A.ID_CODE (+) "); 
     sql.AppendLine(" and V.organization_id != 122 "); 
     sql.AppendLine(" and V.organization_id is not null "); 
     sql.AppendLine("ORDER BY A.NAME ASC "); 
     using (DataTable dt = DataManager.GetData(sql)) 
     { 
      foreach (DataRow dr in dt.Rows) 
      { 
       try 
       { 
        lst.Add(new Attorney() 
        { 
         AttorneyName = dr["name"].Equals(DBNull.Value) ? "" : dr["name"].ToString(), 
         OrganizationID = int.Parse(dr["organization_id"].ToString()), 
         AttorneyID = dr["attorney_id"].Equals(DBNull.Value) ? "" : dr["attorney_id"].ToString(), 
         Caption = dr["caption"].Equals(DBNull.Value) ? "" : dr["caption"].ToString() 
        }); 
       } 
       catch (Exception ex) 
       { } 
      } 
     } 

     return lst; 
    } 

    public static List<LegalTransactionRec> insertRecords() 
    { 
     StringBuilder sql = new StringBuilder(); 
     using (DataTable dt = DataManager.GetData(sql)) 
     { 
      foreach (DataRow dr in dt.Rows) 
      { 
       try 
       { 
        sql.AppendLine("INSERT INTO PCOSCETTE.LEGAL_TRANSCATIONS (BATCH_ID, ACCOUNT, ATTORNEY_ID, ORG_ID, TRANSACTION_DATE, DATE_INSERTED, TRANSACTION_CODE, AMOUNT, DESCRIPTION, DEBTOR_SSN"); 
        sql.AppendLine("VALUES ((select max(batch_id) from pcoscette.legal_transaction_batch_info),"); 
       } 
       catch (Exception ex) 
       { } 
      } 
     } 
    } 

    } 
} 

Любая точка в правильном направлении будет спасателем жизни, спасибо. Кроме того, если я забыл что-либо в своем оригинальном посте, сообщите мне, и я добавлю его.

+0

Я считаю, что было бы лучше использовать интерфейс IDbCommand (SqlCommand для сервера MS SQL) с параметрами для вставки в базу данных. Пожалуйста, взгляните на некоторые структуры ORM, такие как NHibernate или BLToolkit, чтобы организовать доступ к уровню данных (свойства класса карты к параметрам базы данных). – oleksa

ответ

0

Создать экземпляр вашего Class и назначить нужные values или переменные в помощью class properties Вот небольшой пример с вашим кодом.

Ваш class-

public class LegalTransactionRec 
{ 
public string AccountNumber { get; set; } 
public string CostAmount { get; set; } 
public string SSN { get; set; } 
public int BatchID { get; set; } 
public Attorney Attorney { get; set; } 
public DateTime TransactionDate { get; set; } 
public string Description { get; set; } 
public int TransactionCode { get; set; } 
} 

Создание экземпляра класса;

Присвоить значения свойствам вашего класса.

objLegal.AccountNumber= someValue1 // or variable 
objLegal.CostAmount= someValue2 // or variable 
........ 
+0

Я уже присвоил значения свойствам класса, вы можете найти этот код внутри 'for loops'. Я также предполагаю, что если я создам новый экземпляр класса, то эти значения больше не будут доступны. – user2405778

+0

Итак, где проблема? Можете ли вы уточнить свою проблему? – prograshid

+0

Извините, мне было ясно, что в исходном посте было ясно, у меня возникла проблема с этими значениями и вызывается их в разделе 'insert statement' моего кода. Код вставки можно найти во второй части кода, который я предоставил. Я решил, что мне нужен «цикл foreach», но когда я пытаюсь указать на «rowcount», он не может быть найден. – user2405778

Смежные вопросы