Wednesday, April 3, 2013

ASP.NET, C# (Insert data form file into database using SqlBulkCopy)



/// Data from text file














///
 Implementation

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.IO;
using System.Data.SqlClient;

/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
    /// <summary>
    ///Table feilds as in the table in Database
    /// </summary>
    enum TableFeilds
    {
        ID,
        FName,
        LName,
        Age,
        Address,
    }

    /// <summary>
    ///Parcing data from file
    /// </summary>
    public DataTable CreateDataTableFromData(StreamReader strReader)
    {
        string sRdrLine = String.Empty;
        DataTable dt = new DataTable("TableName"); //Table Name should be the same as in the DataBase

        try
        {

            foreach (String strEnumsValues in Enum.GetNames(typeof(TableFeilds)))
            {
                dt.Columns.Add(strEnumsValues);
            }

            while (!strReader.EndOfStream)
            {
                sRdrLine = strReader.ReadLine();
                DataRow row = dt.NewRow();
                if (sRdrLine.Trim() != string.Empty)
                {
                    if (sRdrLine.Split('|').GetValue(0).ToString().Trim().Length > 0)
                        row["ID"] = sRdrLine.Split('|').GetValue(0).ToString();
                    else
                        row["ID"] = DBNull.Value;

                    if (sRdrLine.Split('|').GetValue(1).ToString().Trim().Length > 0)
                        row["FName"] = sRdrLine.Split('|').GetValue(1).ToString();
                    else
                        row["FName"] = DBNull.Value;

                    if (sRdrLine.Split('|').GetValue(2).ToString().Trim().Length > 0)
                        row["LName"] = sRdrLine.Split('|').GetValue(2).ToString();
                    else
                        row["LName"] = DBNull.Value;

                    if (sRdrLine.Split('|').GetValue(3).ToString().Trim().Length > 0)
                        row["Age"] = sRdrLine.Split('|').GetValue(3).ToString();
                    else
                        row["Age"] = DBNull.Value;

                    if (sRdrLine.Split('|').GetValue(4).ToString().Trim().Length > 0)
                        row["Address"] = sRdrLine.Split('|').GetValue(4).ToString();
                    else
                        row["Address"] = DBNull.Value;


                    dt.Rows.Add(row);
                    sRdrLine = null;
                }
            }

        }
        catch (Exception ex)
        {
            throw ex;
        }

        return dt;
    }

    /// <summary>
    ///Inserting Data into data base
    /// </summary>
    public bool InsertDataViaSqlBulkCopy(DataTable dt, string strStoreProcedure)
    {
        string mySqlConnectionString = ""; //Your DB SonnectionString here...
        bool isDone = false;
        SqlConnection conn = null;
        SqlTransaction trans = null;
        SqlCommand cmd = null;
        try
        {
            conn = new SqlConnection(mySqlConnectionString);

            conn.Open();
            trans = conn.BeginTransaction();
            cmd = new SqlCommand(strStoreProcedure, conn);
            cmd.CommandTimeout = 550;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Transaction = trans;
            cmd.ExecuteNonQuery();
            using (SqlBulkCopy objbulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, trans))
            {
                objbulkCopy.BulkCopyTimeout = 550;
                foreach (DataColumn dtColumn in dt.Columns)
                {
                    objbulkCopy.ColumnMappings.Add(dtColumn.ColumnName, dtColumn.ColumnName);
                }
                objbulkCopy.DestinationTableName = dt.TableName;
                objbulkCopy.BatchSize = dt.Rows.Count;
                objbulkCopy.WriteToServer(dt);
                isDone = true;
            }
            trans.Commit();
            conn.Close();
        }
        catch (Exception ex)
        {
            if (trans != null)
            {
                trans.Rollback();
            }
            throw ex;

        }
        finally
        {
            if (conn != null)
            {
                conn.Dispose();
                conn = null;
            }
        }
        return isDone;
    }


    /// <summary>
    /// Class1 constructor
    /// </summary>
       public Class1()
       {
        if (File.Exists("FilePath") == true)
        {
            using (StreamReader strReaderSup = File.OpenText("FilePath"))
            {
                DataTable dt = CreateDataTableFromData(strReaderSup);
                strReaderSup.Dispose();

                if (dt.Rows.Count > 0)
                {
                    InsertDataViaSqlBulkCopy(dt, "yourSPName");
                }

            }
        }
       }
}

No comments:

Post a Comment