Click here to Skip to main content
15,897,891 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
i have c# String look like this:
String name is finaloutput
C#
"IP,C1,PktUp,PktDown,Upstream,Downstream,C2,C3,C4,C5\r\n192.168.1.56,0,77776,98364,9203233,96637437,0,0,0,0\r\n192.168.1.12,0,80718,105922,11845169,94299988,0,0,0,0"

i want to insert String data to sql database table
this is my column header
IP,C1,PktUp,PktDown,Upstream,Downstream,C2,C3,C4,C5

this is my data row
192.168.1.56,0,77776,98364,9203233,96637437,0,0,0,0
192.168.1.12,0,80718,105922,11845169,94299988,0,0,0,0

my table name is usage
my table column name is
SQL
IP C1 PktUp PktDown Upstream Downstream C2 C3 C4 C5

how to insert data to my table.
i try this code but insert first row only.

C#
private void button1_Click(object sender, EventArgs e)
{
    string finaloutput = "IP,C1,PktUp,PktDown,Upstream,Downstream,C2,C3,C4,C5\r\n192.168.1.56,0,77776,98364,9203233,96637437,0,0,0,0\r\n192.168.1.12,0,80718,105922,11845169,94299988,0,0,0,0";

    string[] fields = finaloutput.Split(',');
    using (SqlConnection con = new SqlConnection(@"Data Source='localhost';Initial Catalog='NetUsage';User ID='sa';Password='tstc123'"))
    {

        con.Open();
        SqlCommand cmd = new SqlCommand("INSERT INTO usage(IP, Upstream, Downstream) VALUES (@IP, @Upstream, @Downstream)", con);
        cmd.Parameters.AddWithValue("@IP", fields[0].ToString());
        cmd.Parameters.AddWithValue("@Upstream", fields[4].ToString());
        cmd.Parameters.AddWithValue("@Downstream", fields[5].ToString());
        cmd.ExecuteNonQuery();
    }
}

look like this
SQL
IP  Upstream  Downstream                                         
--- --------- -----------
IP  Upstream   Downstream 

i want to this
SQL
IP            Upstream   Downstream                                         
---           ---------  -----------
192.168.1.56  9203233    96637437 
192.168.1.12  11845169   94299988 

Plz help me i am new to c#
Posted

You have to split the lines before splitting each column value.
This way:
C#
string finaloutput = "IP,C1,PktUp,PktDown,Upstream,Downstream,C2,C3,C4,C5\r\n192.168.1.56,0,77776,98364,9203233,96637437,0,0,0,0\r\n192.168.1.12,0,80718,105922,11845169,94299988,0,0,0,0";

string[] lines = finaloutput.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

string line;
string[] fields;

using (SqlConnection con = new SqlConnection(@"Data Source='localhost';Initial Catalog='NetUsage';User ID='sa';Password='tstc123'")) {

   con.Open();

   using (SqlCommand cmd = new SqlCommand("INSERT INTO usage(IP, Upstream, Downstream) VALUES (@IP, @Upstream, @Downstream)", con)) {

      cmd.Parameters.Add("@IP");
      cmd.Parameters.Add("@Upstream");
      cmd.Parameters.Add("@Downstream");

      // We start at index 1 as the first row (index 0) seems to hold column headers
      for (int i = 1; i < lines.Length; i++) {
         line = lines[i];
         fields = line.Split(',');
         cmd.Parameters["@IP"].Value = fields[0];
         cmd.Parameters["@Upstream"].Value = fields[4];
         cmd.Parameters["@Downstream"].Value = fields[5];
         cmd.ExecuteNonQuery();
      }
   }
}


[Edit] Removed unnecessary ToString() invocations [/Edit]
 
Share this answer
 
v4
Comments
isuru chanaka 20-Aug-15 0:16am    
I get an error message

The SqlParameterCollection only accepts non-null SqlParameter type objects, not String objects.
isuru chanaka 20-Aug-15 0:34am    
i change code little bit now ok...

cmd.Parameters.Add("@IP", SqlDbType.VarChar);
cmd.Parameters.Add("@Upstream", SqlDbType.Float);
cmd.Parameters.Add("@Downstream", SqlDbType.Float);
C#
private void button2_Click(object sender, EventArgs e)
{
    string finaloutput = "IP,C1,PktUp,PktDown,Upstream,Downstream,C2,C3,C4,C5\r\n192.168.1.56,0,77776,98364,9203233,96637437,0,0,0,0\r\n192.168.1.12,0,80718,105922,11845169,94299988,0,0,0,0";
    string[] lines = finaloutput.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

    string line;
    string[] fields;

    using (SqlConnection con = new SqlConnection(@"Data Source='localhost';Initial Catalog='NetUsage';User ID='sa';Password='tstc123'"))
    {

        con.Open();

        using (SqlCommand cmd = new SqlCommand("INSERT INTO csv (IP, Upstream, Downstream) VALUES (@IP, @Upstream, @Downstream)", con))
        {

            //cmd.Parameters.Add("@IP");
            //cmd.Parameters.Add("@Upstream");
            //cmd.Parameters.Add("@Downstream");
            cmd.Parameters.Add("@IP", SqlDbType.VarChar);
            cmd.Parameters.Add("@Upstream", SqlDbType.Float);
            cmd.Parameters.Add("@Downstream", SqlDbType.Float);


            // We start at index 1 as the first row (index 0) seems to hold column headers
            for (int i = 1; i < lines.Length; i++)
            {
                line = lines[i];
                fields = line.Split(',');
                cmd.Parameters["@IP"].Value = fields[0];
                cmd.Parameters["@Upstream"].Value = fields[4];
                cmd.Parameters["@Downstream"].Value = fields[5];
                cmd.ExecuteNonQuery();

            }
            MessageBox.Show("Successfull!");
        }
    }
}
 
Share this answer
 
You need to split the input in two phases. First split over "\r\n" and then on each row split over ",". Modify your code as per below approach.

C#
string[] rows = finaloutput.Split(new string[] { "\r\n" }, StringSplitOptions.None);

foreach(string srow in rows)
{
string[] fields = srow.Split(',');
    using (SqlConnection con = new SqlConnection(@"Data Source='localhost';Initial Catalog='NetUsage';User ID='sa';Password='tstc123'"))
    {
 
        con.Open();
        SqlCommand cmd = new SqlCommand("INSERT INTO usage(IP, Upstream, Downstream) VALUES (@IP, @Upstream, @Downstream)", con);
        cmd.Parameters.AddWithValue("@IP", fields[0].ToString());
        cmd.Parameters.AddWithValue("@Upstream", fields[4].ToString());
        cmd.Parameters.AddWithValue("@Downstream", fields[5].ToString());
        cmd.ExecuteNonQuery();
    }
}
 
Share this answer
 
Comments
isuru chanaka 20-Aug-15 0:18am    
this is okay but insert with column header

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



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900