Click here to Skip to main content
15,881,812 members
Articles / Productivity Apps and Services / Microsoft Office

Reading Online CSV File and Manage it into Microsoft SQL Database

Rate me:
Please Sign up or sign in to vote.
4.38/5 (14 votes)
7 Aug 2012CPOL2 min read 55K   879   36   14
How to read an online Excel file and manage it in Microsoft SQL database

Introduction

For software developers who have been working for long days, there might be a need to read online files from desktop or web applications and then store the data in local system or database. It is a little complex if you have no experience in it. There are several ways in which you can do it. In this demonstration, I will explain it from my experience to handle this type of situation.

Background

I have an Excel file online, the URL is http://velocitypath.com/odesk/buildings.csv. I need to read this file and manage it in Microsoft SQL Server database. The structure of the Excel file is given below:

Image 1

Figure 1

Let’s Get Started

To store data from Excel file to database, it is required to create a table structure in Microsoft SQL Server database.

  • Open Microsoft SQL Server Management Studio
  • Create a table structure like below:

Image 2

Figure 2

Open Microsoft Visual Studio 2010

  • Create a New Project (File>New>Project>Visual C#>Windows Form Application)
  • Name it as ReadingOnlineExcelFile

Image 3

Figure 3

By default, the new project includes a form called ReadExcel.cs. Design the form like below:

Image 4

Figure 4

To read the online file, you need to send web request. After processing successful web request, the web server will return a web response. To accomplish this, you need to use HttpWebRequest, HttpWebResponse classes. And WebRequest class is used to create a web request. All these classes can be found in System.Net namespace.

C#
using System.Net;

Now, create a method for handling web request and to get counter response. Our intention is to get StreamReader object as a return value of this method. So you need to include:

C#
using System.IO;
C#
#region Method

private StreamReader GetStream()
        {
            String strURL = String.Empty;
            strURL = "http://velocitypath.com/odesk/buildings.csv";

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);

            StreamReader reader;

            using (HttpWebResponse response =(HttpWebResponse)request.GetResponse())
            {
                reader = new StreamReader(response.GetResponseStream());
            }

            return reader;
        }

#endregion Method

In the above method, WebRequest.Create() is used to create web request, to get response from web request GetResponse(), to read stream from web response, GetResponseStream() is used.

Add System.Configuration reference:

Image 5

Figure 5

Add the following namespace for data and SQL Operation.

C#
using System.Data;
using System.Configuration;
using System.Data.SqlClient;

Add the following code in button click event:

C#
private void btnReadExcel_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection
            (ConfigurationManager.ConnectionStrings["SQLConnection"].ToString()))
            {
                conn.Open();

                StreamReader streamReader;

                streamReader = GetStream();

                streamReader.ReadLine();
                while (!streamReader.EndOfStream)
                {
                    String []row = streamReader.ReadLine().ToString().Split(',');

                    SqlCommand selectCommand;
                    selectCommand = new SqlCommand("SELECT * FROM Location
                    WHERE Latitude=@Latitude AND Longitude=@Longitude", conn);

                    selectCommand.Parameters.Add("@Latitude",
                    SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[0]);
                    selectCommand.Parameters.Add("@Longitude",
                    SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[1]);

                    SqlDataReader reader = selectCommand.ExecuteReader();

                    if (!reader.HasRows)
                    {
                        reader.Close();

                        SqlCommand insertCommand;
                        insertCommand = new SqlCommand("INSERT INTO Location
                        (Latitude,Longitude,BuildingName)
                        VALUES(@Latitude,@Longitude,@BuildingName)", conn);

                        insertCommand.Parameters.Add("@Latitude",
                        SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[0]);
                        insertCommand.Parameters.Add("@Longitude",
                        SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[1]);
                        insertCommand.Parameters.Add("@BuildingName",
                        SqlDbType.VarChar, 100).Value = row[2].ToString();

                        int intResult;
                        intResult = insertCommand.ExecuteNonQuery();
                    }
                }
            }
        }

In the above code, the following GetStream() returns Stream from web request.

C#
streamReader = GetStream();
C#
streamReader.ReadLine();

The above line of code reads line from stream.

Image 6

Figure 6

Add line from stream into array for easy manipulation.

C#
String []row = streamReader.ReadLine().ToString().Split(',');

Image 7

Figure 7

Now check whether data already exists in the database.

C#
SqlCommand selectCommand;
selectCommand = new SqlCommand
     ("SELECT * FROM Location WHERE Latitude=@Latitude AND Longitude=@Longitude", conn);

     selectCommand.Parameters.Add("@Latitude",
     SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[0]);
     selectCommand.Parameters.Add("@Longitude",
     SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[1]);

     SqlDataReader reader = selectCommand.ExecuteReader();

     if (!reader.HasRows)
     {
     }

If not, then insert data into database.

C#
reader.Close();

SqlCommand insertCommand;
insertCommand = new SqlCommand("INSERT INTO Location
                (Latitude,Longitude,BuildingName) VALUES
                (@Latitude,@Longitude,@BuildingName)", conn);

insertCommand.Parameters.Add("@Latitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[0]);
insertCommand.Parameters.Add("@Longitude",
SqlDbType.Decimal, 20).Value = Convert.ToDecimal(row[1]);
insertCommand.Parameters.Add("@BuildingName",
SqlDbType.VarChar, 100).Value = row[2].ToString();

int intResult;
intResult = insertCommand.ExecuteNonQuery();

Here is the result from the database:

Image 8

Figure 8

Conclusion

By reading this article, you can create your online file reading application. I think this may help you in software development and professional work.

History

  • 28th March, 2011: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Team Leader
Bangladesh Bangladesh
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Questionwhy I'm getting error at readline() Pin
n shiva Ram31-Oct-14 1:31
n shiva Ram31-Oct-14 1:31 
QuestionMy vote of 1 Pin
tvbic7-Nov-13 19:26
tvbic7-Nov-13 19:26 
SuggestionOnline Excel Pin
Igor Petrushenko3-Nov-12 22:24
Igor Petrushenko3-Nov-12 22:24 
I highly recommend you trying MyTaskHelper.com online database. It also allows import from Excel to online database
GeneralOk as an excercise but... Pin
dave.dolan8-Aug-12 6:30
dave.dolan8-Aug-12 6:30 
GeneralRe: Ok as an excercise but... Pin
Abdul Quader Mamun8-Aug-12 16:13
Abdul Quader Mamun8-Aug-12 16:13 
GeneralMy vote of 3 Pin
cjb1107-Aug-12 21:08
cjb1107-Aug-12 21:08 
Questioncan i read xlsx from your code Pin
Member 894239223-Jul-12 4:08
Member 894239223-Jul-12 4:08 
GeneralMy vote of 1 Pin
Wooln30-Aug-11 20:57
Wooln30-Aug-11 20:57 
GeneralRe: My vote of 1 Pin
nits2330-Jul-15 0:29
professionalnits2330-Jul-15 0:29 
GeneralOther solution Pin
CikaPero10-Apr-11 22:24
CikaPero10-Apr-11 22:24 
General5 Star Article Pin
Code Hungery (Rashed Nadeem)5-Apr-11 0:46
Code Hungery (Rashed Nadeem)5-Apr-11 0:46 
GeneralRe: 5 Star Article Pin
nits2330-Jul-15 0:28
professionalnits2330-Jul-15 0:28 
General[My vote of 1] Misleading article title Pin
PaulLinton4-Apr-11 12:25
PaulLinton4-Apr-11 12:25 
GeneralMy vote of 5 Pin
SureshDeyna29-Mar-11 16:07
SureshDeyna29-Mar-11 16:07 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.