Member 14164412 Ответов: 1

Как я могу решить, что "пустое имя пути не является законным" в VB.NET .


я пытаюсь сохранить профиль учителя с изображением в ms access с помощью vb.net-да.

Что я уже пробовал:

Public Overloads Function SaveMEMBER() As DataSet
      Return Me.SaveMEMBER("RFID")
  End Function
  Public Overloads Function SaveMEMBER(ByVal sortfield As String) As DataSet
      Dim OpenFileDialog1 As New OpenFileDialog
      Dim fsreader As New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
      Dim breader As New BinaryReader(fsreader)
      Dim imgbuffer(fsreader.Length) As Byte
      breader.Read(imgbuffer, 0, fsreader.Length)
      fsreader.Close()
      Dim a As String
      Dim b As String
      b = Form4.lbldate.Text

      a = Form4.txtname.Text & ", " & Form4.txtmid.Text & " " & Form4.txtsur.Text & "."

      Dim conn As OleDb.OleDbConnection = GetConnection()
      Dim SQL As String

      Try
          SQL = "INSERT INTO PROFILE ( [RFID], [IDNUMBER], [NAME],  [GENDER], [POSITION], [BIRTHDATE], [AGE]," & _
          " [DATEENCODED],[PICTURE])VALUES ( RFID, IDNUMBER, NAME,  GENDER, POSITION, BIRTHDATE, AGE, DATEENCODED, PICTURE)"


          Dim cmd As New OleDb.OleDbCommand(SQL, conn)
          cmd.Parameters.Add(New OleDb.OleDbParameter("RFID", Form4.txtrfid.Text))
          cmd.Parameters.Add(New OleDb.OleDbParameter("IDNUMBER", Form4.txtid.Text))
          cmd.Parameters.Add(New OleDb.OleDbParameter("NAME", a))
          cmd.Parameters.Add(New OleDb.OleDbParameter("GENDER", Form4.cbogen.SelectedItem))
          cmd.Parameters.Add(New OleDb.OleDbParameter("POSITION", Form4.txtpos.Text))
          cmd.Parameters.Add(New OleDb.OleDbParameter("BIRTHDATE", Form4.txtbdate.Text))
          cmd.Parameters.Add(New OleDb.OleDbParameter("AGE", Form4.txtage.Text))
          cmd.Parameters.Add(New OleDb.OleDbParameter("DATEENCODED", b))
          acscmd.CommandText = strsql
          acscmd.Connection = acsconn
          acscmd.Parameters.AddWithValue("PICTURE", imgbuffer)
          conn.Open()
          cmd.ExecuteNonQuery()
          MessageBox.Show("New Member is added!")
          clear()
      Catch ex As Exception

          MsgBox("Error in connection!ID or PIN already exist!")
      Finally
          conn.Close()
          conn.Dispose()
      End Try

  End Function

Richard MacCutchan

Где-то в этом коде (вы не сказали нам, где происходит ошибка) вы пытаетесь сослаться на файл (я предполагаю), не указывая его имя.

Почему вы храните даты и возраст в виде строк? В самом деле, зачем вообще хранить возраст, если он будет неправильным, как только эта запись будет существовать более 24 часов? Вы должны хранить даты в виде типов Date или DateTime и вычислять значения возраста только тогда, когда вам нужно их отобразить.

И наконец, вы должны проверить возвращаемое значение из ExecuteNonQuery, чтобы убедиться, что ваша команда SQL выполнена успешно. Не думайте, что это сработало.

1 Ответов

Рейтинг:
8

OriginalGriff

Хм.
Вы создаете OpenFileDialog, а затем сразу же используете свойство FileName.
Но вы ни в коем случае не показываете его пользователю!
Поскольку пользователь не видит его, он не выбирает файл, поэтому свойство FileName пусто, и вы получаете исключение.

Dim OpenFileDialog1 As OpenFileDialog = New OpenFileDialog()

If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    Dim fsreader As FileStream = New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
    ...
End If


Member 14164412

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

OriginalGriff

Поэтому используйте отладчик и посмотрите, что именно вы отправляете в SQL - мы не можем этого сделать!

Member 14164412

ладно ладно я извиняюсь

OriginalGriff

Это нормально, я не раздражаюсь - просто указываю, что мы не можем видеть вашу базу данных или ваш экран, поэтому мы понятия не имеем, какие столбцы у вас есть или что вы в них помещаете.
Однако вы можете: это одна из (многих) вещей, которые отладчик может сделать для вас!

Richard Deeming

SQL = "INSERT INTO PROFILE ( [RFID], [IDNUMBER], [NAME],  [GENDER], [POSITION], [BIRTHDATE], [AGE]," & _
      " [DATEENCODED],[PICTURE])VALUES ( RFID, IDNUMBER, NAME,  GENDER, POSITION, BIRTHDATE, AGE, DATEENCODED, PICTURE)"


Этот вопрос выглядит неправильным. Вы нигде не ссылаетесь на значения параметров. Для MS Access вам необходимо использовать ? заполнитель для параметров:
SQL = "INSERT INTO PROFILE ( [RFID], [IDNUMBER], [NAME],  [GENDER], [POSITION], [BIRTHDATE], [AGE]," & _
      " [DATEENCODED],[PICTURE]) VALUES ( ?, ?, ?,  ?, ?, ?, ?, ?, ?)"