*.csv сохранить в БД ?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

*.csv сохранить в БД ?

Сообщение artist7 » 25.10.2005 (Вт) 11:58

Сразу скажу, что КОД писал не я (к сожалению).

Есть *.csv данные, которые я хочу сохранить в уже подогнанный БД (т.е. количество столбцов и вставляемых данных соответствует).

Все проходит нормально, данные сохранены в БД, но в конце появляется, в этом месте, если идти пошагово:

Catch ex As Exception
MessageBox.Show(ex.Message)

ошибка такого содержания

«Индекс был за пределами области Архива».

Подскажите если кто знает, что это может быть?

Заранее спасибо

Вот код:

Private Sub btnSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpeichern.Click
Dim dateistrom As StreamReader
Dim datensatz As String
Dim datfeld() As String
Dim i As Integer
Dim dbcom As OleDbCommand = New OleDbCommand
Dim bLesen As Boolean = True
Try
OleDbConnection1.Open()
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
dateistrom = New StreamReader(OpenFileDialog1.FileName)
datensatz = dateistrom.ReadLine() While (bLesen)
datensatz = dateistrom.ReadLine
If datensatz = Nothing Then Exit While
datfeld = datensatz.Split(", ")
For i = 0 To datfeld.Length - 1
datfeld(i).Replace(""""c, " ")
datfeld(i).Trim()
Next

Dim ss As String

ss = "INSERT INTO Table_IlonA_0 ( UCPTlogTime, UCPTpointName, UCPTlocation, UCPTlogSourceAddress, UCPTpointStatus, UCPTvalueDef, UCPTvalue, UCPTunit, Datum )" _
& " VALUES ('" & datfeld(0) & "','" & datfeld(1) & "','" & datfeld(2) & "','" & datfeld(3) & "','" & datfeld(4) & "','" & datfeld(5) & "','" & datfeld(6) & "','" & datfeld(7) & "','" & Now() & "')"
dbcom.Connection = OleDbConnection1
dbcom.CommandText = ss
dbcom.ExecuteNonQuery()
End While
OleDbConnection1.Close()
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
End Class

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2005 (Вт) 12:39

Отформатируй код, читать сложно...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

Сообщение artist7 » 25.10.2005 (Вт) 13:00

Код: Выделить всё
Private Sub btnSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpeichern.Click
    Dim dateistrom As StreamReader
    Dim datensatz As String
    Dim datfeld() As String
    Dim i As Integer
    Dim dbcom As OleDbCommand = New OleDbCommand
    Dim bLesen As Boolean = True
    Try
      OleDbConnection1.Open()
      If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
        dateistrom = New StreamReader(OpenFileDialog1.FileName)
                datensatz = dateistrom.ReadLine()
        While (bLesen)
          datensatz = dateistrom.ReadLine
          If datensatz = Nothing Then Exit While
          datfeld = datensatz.Split(", ")
          For i = 0 To datfeld.Length - 1
            datfeld(i).Replace(""""c, " ")
            datfeld(i).Trim()
                    Next

                    Dim ss As String

                    ss = "INSERT INTO Table_IlonA_0 ( UCPTlogTime, UCPTpointName, UCPTlocation, UCPTlogSourceAddress, UCPTpointStatus, UCPTvalueDef, UCPTvalue, UCPTunit, Datum )" _
                                          & " VALUES ('" & datfeld(0) & "','" & datfeld(1) & "','" & datfeld(2) & "','" & datfeld(3) & "','" & datfeld(4) & "','" & datfeld(5) & "','" & datfeld(6) & "','" & datfeld(7) & "','" & Now() & "')"
                    dbcom.Connection = OleDbConnection1
                    dbcom.CommandText = ss
                    dbcom.ExecuteNonQuery()
                End While
        OleDbConnection1.Close()
      End If
    Catch ex As Exception
      MessageBox.Show(ex.Message)
    End Try
  End Sub
End Class

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2005 (Вт) 13:03

Жуть...

artist7, сделай так, пожалуйста, чтобы начало и конец блока были на одинаковом отступе. А то когда whlie 8 пробелов от левого края, а end while в 16, не понятно вообще ничего совсем...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

Сообщение artist7 » 25.10.2005 (Вт) 13:18

Код: Выделить всё
Private Sub btnSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpeichern.Click
    Dim dateistrom As StreamReader
    Dim datensatz As String
    Dim datfeld() As String
    Dim i As Integer
    Dim dbcom As OleDbCommand = New OleDbCommand
    Dim bLesen As Boolean = True
    Try
      OleDbConnection1.Open()
      If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
        dateistrom = New StreamReader(OpenFileDialog1.FileName)
        datensatz = dateistrom.ReadLine()     'erster Satz wird ausgeblendet
        While (bLesen)
          datensatz = dateistrom.ReadLine
          If datensatz = Nothing Then Exit While
          datfeld = datensatz.Split(", ")
          For i = 0 To datfeld.Length - 1
            datfeld(i).Replace(""""c, " ")
            datfeld(i).Trim()
                    Next

                    Dim ss As String

                    ss = "INSERT INTO Table_IlonA_0 ( UCPTlogTime, UCPTpointName, UCPTlocation, UCPTlogSourceAddress, UCPTpointStatus, UCPTvalueDef, UCPTvalue, UCPTunit, Datum )" _
                                          & " VALUES ('" & datfeld(0) & "','" & datfeld(1) & "','" & datfeld(2) & "','" & datfeld(3) & "','" & datfeld(4) & "','" & datfeld(5) & "','" & datfeld(6) & "','" & datfeld(7) & "','" & Now() & "')"
                    dbcom.Connection = OleDbConnection1
                    dbcom.CommandText = ss
                    'MessageBox.Show(ss)
                    dbcom.ExecuteNonQuery()
                End While
        OleDbConnection1.Close()
      End If
    Catch ex As Exception
      MessageBox.Show(ex.Message)
    End Try
  End Sub
End Class

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2005 (Вт) 13:31

Видимо не судьба...

Код: Выделить всё
Private Sub btnSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpeichern.Click
  Dim dateistrom As StreamReader
  Dim datensatz As String
  Dim datfeld() As String
  Dim i As Integer
  Dim dbcom As OleDbCommand = New OleDbCommand
  Dim bLesen As Boolean = True
 
  Try
    OleDbConnection1.Open()
    If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
      dateistrom = New StreamReader(OpenFileDialog1.FileName)
      datensatz = dateistrom.ReadLine()     'erster Satz wird ausgeblendet
      While (bLesen)
        datensatz = dateistrom.ReadLine
        If datensatz = Nothing Then Exit While
        datfeld = datensatz.Split(", ")
        For i = 0 To datfeld.Length - 1
          datfeld(i).Replace(""""c, " ")
          datfeld(i).Trim()
        Next

        Dim ss As String

        ss = "INSERT INTO Table_IlonA_0 ( UCPTlogTime, UCPTpointName, UCPTlocation, UCPTlogSourceAddress, UCPTpointStatus, UCPTvalueDef, UCPTvalue, UCPTunit, Datum )" _
          & " VALUES ('" & datfeld(0) & "','" & datfeld(1) & "','" & datfeld(2) & "','" & datfeld(3) & "','" & datfeld(4) & "','" & datfeld(5) & "','" & datfeld(6) & "','" & datfeld(7) & "','" & Now() & "')"
        dbcom.Connection = OleDbConnection1
        dbcom.CommandText = ss
        'MessageBox.Show(ss)
        dbcom.ExecuteNonQuery()
      End While
      OleDbConnection1.Close()
    End If
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  End Try
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

судьба, судьба

Сообщение artist7 » 25.10.2005 (Вт) 14:12

судьба, судьба : )

отлучался я.

GSerg -спасибо, а то я по пока в настройках копался и "интелигению" в коде отключал.

бл ... еще и интерфейс на "вражеском" языке

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2005 (Вт) 14:19

Ну так чё? Где именно возникает исключение?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

Сообщение artist7 » 25.10.2005 (Вт) 14:29

при переходе в Catch ветку

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2005 (Вт) 14:38

В catch ветку переход будет, если возникло исключение.
Где оно возникает?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

Сообщение artist7 » 25.10.2005 (Вт) 14:54

на четвертом заходе в ветку While доходит до:

ss = "INSERT INTO Table_IlonA_0 ( UCPTlogTime, ...............

следеющим шагом переходит в

Catch ex As Exception

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2005 (Вт) 14:56

Индекс был за пределами области архива... Придумают же...

Сколько элементов в массиве datfeld перед четвёртым разом?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

Сообщение artist7 » 25.10.2005 (Вт) 15:00

сколько строчек в *.csv документе, столько он и делает проходов.
Когдо донные заканчиваются, он читат пустую строку и выдает ошибку.

А как сделать, что бы он ее не читал или "выходил по-людски"?

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

Сообщение artist7 » 25.10.2005 (Вт) 15:14

GSerg писал(а):Сколько элементов в массиве datfeld перед четвёртым разом


все время 8 , а при последнем проходе - один

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2005 (Вт) 15:19

datensatz проверь на последнем проходе.
Если и тогда не поймёшь, чё делать...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

Сообщение artist7 » 25.10.2005 (Вт) 15:32

написал

If datensatz = " "

и заработало !!!!

Сенкс тебе, очень большого размера !!!

Раз уж ты как говорится "в материале" есть еще вопросик по этому коду

???

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2005 (Вт) 15:37

Не только я "в материале"...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

Сообщение artist7 » 25.10.2005 (Вт) 16:13

Под "в материале" имелось в виду, что ты мой код минимум 1 раз прочитал.
Остальные открыли, увидели мой "художкства" и ..."умыли руки".
Что , собственно говоря, вполне логично.

А вопрос такой,

- сохранил я данные в БД (допустим 3 строчки из *.csv)
- теперь в этот *.csv добавилось еще 2 новых строчки
- я сохраняю эти данные снова в той же БД, при этом дублируются строки

как сделать так, что бы перед сохранением проверялось, нет ли в БД таких же строк и прописывались только вновь появившиеся ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2005 (Вт) 16:27

А что значит "такая же строка"?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

artist7
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 19.10.2005 (Ср) 9:53

Сообщение artist7 » 25.10.2005 (Вт) 16:48

ID в таблице строке присваивается конечно новый, поэтому он и прописывает старые даныые под новым ID.
Но содержание то строки остается старое.

Например:

первый параметр в моем csv-файле - время.

В Таблице БД он становится вторым (после ID)

Мне необходимо, что бы перед тем. как прописывать строку в БД было условие, которое проверяло бы:
если первый елемент моего csv-файла равен содержимому второго столбца вышеуказанной таблицы БД.
И если нет, то только тогда прописывал бы НОВЫЕ данные в БД

Т.е. на уровне алгоритма я понимаю - как это, а вот на VB ....


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 50

    TopList  
cron