Web Forms / HTTP File Upload / String.Split a StreamReader.ReadLine() string

Discussion in 'ASP General' started by Andy Mee, Nov 18, 2003.

  1. Andy Mee

    Andy Mee Guest

    Hello one and all,

    I'm developing an Asp.NET system to take a CSV file uploaded via the web,
    parse it, and insert the values into an SQL database. My sticking point
    comes when I try to split() the string returned by readline() on the file.

    The following code snippet works for me:
    tokens = "one,two,three,four".Split(",")
    for each token in tokens
    response.write("<td>"+token+"</td>")
    next

    However, if I take the next line in the CSV, read using
    StreamReader.ReadLine on the PostedFile.InputStream, I receive "Object
    reference not set to an instance of an object." which I have narrowed down
    to be my string holding the line. Further investigation reveals that no
    other string member functions work on my line (.ToCharArray, .ToString,
    etc).

    I suspect that StreamReader.ReadLine is not correctly returning a string,
    even though Response.Write(line) displays what I would expect.

    I would appreciate any help or suggestions anybody can offer as to what's
    going on here.

    Thanks,

    Andy


    -- code --

    <%@ Page Language="VB" Debug="true" %>
    <%@ Import Namespace="System.IO" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
    <link href="adwords.css" rel="stylesheet" type="text/css" media="screen" />
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Upload CSV</title>
    </head>
    <body>

    <script runat="server">
    Sub UploadFile_Clicked(Sender as Object, e as EventArgs)
    Dim str As Stream

    str = loFile.PostedFile.InputStream()
    Dim sr As StreamReader = New StreamReader(str)

    Dim tokens as String() = Nothing
    Dim line, token, t as String

    Dim i as integer
    for i = 1 to 6
    line = sr.ReadLine()
    next i
    response.write("<table>")

    do
    line = sr.ReadLine()
    response.write("<tr>")
    tokens = line.Split(ControlChars.Tab)
    for each token in tokens
    response.write("<td>"+token+"</td>")
    next
    response.write("</tr>")
    loop until line is nothing
    response.write("</table>")

    sr.close()

    End sub
    </script>

    <form action="upload.aspx" method="post" enctype="multipart/form-data"
    runat="server">
    <fieldset>
    <legend>Select a file to upload:</legend>
    <p><input id="loFile" type="file" runat="server"></p>
    <p><input type="submit" OnServerClick="UploadFile_Clicked"
    class="clientloginsubmit" name="Submit" value="Upload AdWords CSV"
    runat="server" /></p>
    </fieldset>
    </form>

    </body>
    </html>
     
    Andy Mee, Nov 18, 2003
    #1
    1. Advertising

  2. Andy Mee

    TomB Guest

    This forum is for classic asp questions.

    If this were in classic asp, personally I'd use ado to connect to the csv
    and treat it like a database table.


    "Andy Mee" <> wrote in message
    news:bpdbfv$n5$...
    > Hello one and all,
    >
    > I'm developing an Asp.NET system to take a CSV file uploaded via the web,
    > parse it, and insert the values into an SQL database. My sticking point
    > comes when I try to split() the string returned by readline() on the file.
    >
    > The following code snippet works for me:
    > tokens = "one,two,three,four".Split(",")
    > for each token in tokens
    > response.write("<td>"+token+"</td>")
    > next
    >
    > However, if I take the next line in the CSV, read using
    > StreamReader.ReadLine on the PostedFile.InputStream, I receive "Object
    > reference not set to an instance of an object." which I have narrowed down
    > to be my string holding the line. Further investigation reveals that no
    > other string member functions work on my line (.ToCharArray, .ToString,
    > etc).
    >
    > I suspect that StreamReader.ReadLine is not correctly returning a string,
    > even though Response.Write(line) displays what I would expect.
    >
    > I would appreciate any help or suggestions anybody can offer as to what's
    > going on here.
    >
    > Thanks,
    >
    > Andy
    >
    >
    > -- code --
    >
    > <%@ Page Language="VB" Debug="true" %>
    > <%@ Import Namespace="System.IO" %>
    > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    > <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    > <head>
    > <link href="adwords.css" rel="stylesheet" type="text/css" media="screen"

    />
    > <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    > <title>Upload CSV</title>
    > </head>
    > <body>
    >
    > <script runat="server">
    > Sub UploadFile_Clicked(Sender as Object, e as EventArgs)
    > Dim str As Stream
    >
    > str = loFile.PostedFile.InputStream()
    > Dim sr As StreamReader = New StreamReader(str)
    >
    > Dim tokens as String() = Nothing
    > Dim line, token, t as String
    >
    > Dim i as integer
    > for i = 1 to 6
    > line = sr.ReadLine()
    > next i
    > response.write("<table>")
    >
    > do
    > line = sr.ReadLine()
    > response.write("<tr>")
    > tokens = line.Split(ControlChars.Tab)
    > for each token in tokens
    > response.write("<td>"+token+"</td>")
    > next
    > response.write("</tr>")
    > loop until line is nothing
    > response.write("</table>")
    >
    > sr.close()
    >
    > End sub
    > </script>
    >
    > <form action="upload.aspx" method="post" enctype="multipart/form-data"
    > runat="server">
    > <fieldset>
    > <legend>Select a file to upload:</legend>
    > <p><input id="loFile" type="file" runat="server"></p>
    > <p><input type="submit" OnServerClick="UploadFile_Clicked"
    > class="clientloginsubmit" name="Submit" value="Upload AdWords CSV"
    > runat="server" /></p>
    > </fieldset>
    > </form>
    >
    > </body>
    > </html>
    >
    >
     
    TomB, Nov 18, 2003
    #2
    1. Advertising

  3. Andy Mee

    Andy Mee Guest

    > This forum is for classic asp questions.

    Apologies... if I scan my news server for ASP groups, I find precisely five.
    Discounting Italian, German and Hebrew groups, I'm left with three. None of
    them seemed to specify what ASP they were dealing with...


    > If this were in classic asp, personally I'd use ado to connect to the csv
    > and treat it like a database table.


    Thanks for that -- I'll look into the ADO stuff in .NET.

    Still baffled by the completely nonsensical error though :)

    Andy.
     
    Andy Mee, Nov 18, 2003
    #3
  4. Andy Mee

    Ray at Guest

    Use these "words" as your search through the newsgroups:

    aspnet
    adonet
    dotnet (broad)

    Ray at work

    "Andy Mee" <> wrote in message
    news:bpddsd$4h0$...
    > > This forum is for classic asp questions.

    >
    > Apologies... if I scan my news server for ASP groups, I find precisely

    five.
    > Discounting Italian, German and Hebrew groups, I'm left with three. None

    of
    > them seemed to specify what ASP they were dealing with...
    >
    >
    > > If this were in classic asp, personally I'd use ado to connect to the

    csv
    > > and treat it like a database table.

    >
    > Thanks for that -- I'll look into the ADO stuff in .NET.
    >
    > Still baffled by the completely nonsensical error though :)
    >
    > Andy.
    >
    >
     
    Ray at, Nov 18, 2003
    #4
  5. Andy Mee

    Bob Barrows Guest

    Andy Mee wrote:
    >> This forum is for classic asp questions.

    >
    > Apologies... if I scan my news server for ASP groups, I find
    > precisely five. Discounting Italian, German and Hebrew groups, I'm
    > left with three. None of them seemed to specify what ASP they were
    > dealing with...
    >
    >

    The .dotnet.* groups are set up for .Net questions.

    Bob Barrows
    --
    Microsoft MVP -- ASP/ASP.NET
    Please reply to the newsgroup. The email account listed in my From
    header is my spam trap, so I don't check it very often. You will get a
    quicker response by posting to the newsgroup.
     
    Bob Barrows, Nov 18, 2003
    #5
  6. Andy Mee

    TomB Guest

    http://www.able-consulting.com/MDAC...roviders.htm#OLEDBProviderForMicrosoftJetText


    "Andy Mee" <> wrote in message
    news:bpddsd$4h0$...
    > > This forum is for classic asp questions.

    >
    > Apologies... if I scan my news server for ASP groups, I find precisely

    five.
    > Discounting Italian, German and Hebrew groups, I'm left with three. None

    of
    > them seemed to specify what ASP they were dealing with...
    >
    >
    > > If this were in classic asp, personally I'd use ado to connect to the

    csv
    > > and treat it like a database table.

    >
    > Thanks for that -- I'll look into the ADO stuff in .NET.
    >
    > Still baffled by the completely nonsensical error though :)
    >
    > Andy.
    >
    >
     
    TomB, Nov 18, 2003
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Sacha Korell
    Replies:
    2
    Views:
    15,119
    Mattias Sjögren
    Sep 6, 2003
  2. =?Utf-8?B?U29sZWwgU29mdHdhcmU=?=

    StreamReader.ReadLine Maximum Line Size?

    =?Utf-8?B?U29sZWwgU29mdHdhcmU=?=, Jan 13, 2005, in forum: ASP .Net
    Replies:
    1
    Views:
    1,176
    =?Utf-8?B?U29sZWwgU29mdHdhcmU=?=
    Jan 13, 2005
  3. .Net Sports
    Replies:
    11
    Views:
    1,476
    .Net Sports
    Jan 17, 2006
  4. gavino
    Replies:
    4
    Views:
    569
    gavino
    Sep 20, 2010
  5. Replies:
    4
    Views:
    893
Loading...

Share This Page