0

ティッカー シンボルを含む次の配列があります: Public Shared tickerArray() As String = {"GOOG", "AAPL", "V", "MSFT"}. このループを使用する必要があります:For Each tickerValue In Form1.tickerArray各ティッカー シンボルの csv ファイルを Microsoft Access の 1 つの大きなテーブルにロードします。csv ファイルは にあります"http://ichart.yahoo.com/table.csv?s=" & tickerValue。また、各行を一意にするために、csv ファイルからインポートされたテーブルの各行にそれぞれのティッカー シンボルを読み込む必要があります。したがって、データベースの列は、「ティッカー、日付、始値、高値、安値、終値、出来高、および調整終値」である必要があります。

Access へのローカル csv ファイルの読み込みに関する情報を見つけましたが、vb.net を介してインターネットから Access に csv ファイルを読み込む方法がわかりません。

また、このテーブルを頻繁に更新する必要があるため、csv ファイルから新しい一意の行を挿入するだけで済みます。重複はありません。

助言がありますか?ありがとう!

更新: これが私がこれまでに持っているコードです。

Imports System.Data
Imports System.Data.OleDb
Imports System.Net
Imports System.IO

Public Class Form1

Public Shared tickerArray() As String = {"GOOG", "AAPL", "V", "MSFT"}

Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
    Dim myConnection As OleDbConnection
    Dim DBpath As String = 
    Dim sConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & DBpath & ";Persist Security Info=True"
    myConnection = New OleDbConnection(sConnectionString)
    myConnection.Open()

    Dim strURL As String
    Dim strBuffer As String
    For Each tickerValue In Form1.tickerArray
        'Creates the request URL for Yahoo.
        strURL = "http://ichart.yahoo.com/table.csv?s=" & tickerValue
        strBuffer = RequestWebData(strURL)
        'Create array.
        Dim sReader As New StringReader(strBuffer)
        Dim List As New List(Of String)
        Do While sReader.Peek >= 0
            List.Add(sReader.ReadLine)
        Loop
        Dim lines As String() = List.ToArray
        sReader.Close()
        For Each Line In lines.Skip(1)
            MsgBox(Line)
            Dim myInsert As String = TextToInsert(Line, tickerValue)
            Dim cmd As New OleDbCommand(myInsert, myConnection)
            cmd.ExecuteNonQuery()
        Next
    Next
End Sub

Function TextToInsert(ByVal inputString As String, ByVal ticker As String)
    Dim Dt As String = inputString.Split(",")(0).Trim
    Dim Open As String = inputString.Split(",")(1).Trim
    Dim High As String = inputString.Split(",")(1).Trim
    Dim Low As String = inputString.Split(",")(1).Trim
    Dim Close As String = inputString.Split(",")(1).Trim
    Dim Volume As String = inputString.Split(",")(1).Trim
    Dim Adj_Close As String = inputString.Split(",")(1).Trim
    Dim SQLstr As String
    SQLstr = "INSERT INTO Historical (Ticker, Date, Open, High, Low, Close, Volume, Adj Close) " & "VALUES (" & "'" & ticker & "','" & Dt & "','" & Open & "','" & High & "'," & "'" & Low & "','" & Close & "','" & Volume & "','" & Adj_Close & "'" & ")"
    Return SQLstr
End Function

Private Function RequestWebData(ByVal pstrURL As String) As String
    Dim objWReq As WebRequest
    Dim objWResp As WebResponse
    Dim strBuffer As String
    'Contact the website
    objWReq = HttpWebRequest.Create(pstrURL)
    objWResp = objWReq.GetResponse()
    'Read the answer from the Web site and store it into a stream
    Dim objSR As StreamReader
    objSR = New StreamReader(objWResp.GetResponseStream)
    strBuffer = objSR.ReadToEnd
    objSR.Close()

    objWResp.Close()

    Return strBuffer
End Function

End Class

エラー コード "OleDBException was unhandled. Syntax error in INSERT INTO statement." が表示されます。ラインでcmd.ExecuteNonQuery()助けてください!

4

3 に答える 3

2

System.Data.OleDb 名前空間を使用して、db に挿入する関数を定義できます。次のようなもの(非常に大まかな方法​​で):

Dim myConnection As OleDbConnection

Dim sConnectionString  As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & DBpath & ";Persist Security Info=True"

myConnection = New OleDbConnection(sConnectionString)

myConnection.Open()

次に、csv の各行でサイクルを作成します

Dim myInsert as String= functionTextToInsert(inputString)

Dim cmd As New OleDbCommand(myInsert, myConnection)

cmd.ExecuteNonQuery()

functionTextToInsert(ByVal inputString as string) は、csv から行を挿入文字列に変換する関数です: "max;min;vol" -> "Insert into MYTABLE (Column_01,Column_02,Column_03) VALUES (max,min,vol );」

于 2013-03-01T22:15:13.993 に答える