2015-11-10 3 views
1

Я пытаюсь добавить запись введенных данных в таблицу данных, но она не работает. Я пробовал это.Добавить запись в базу данных mysql в vb.net

vb.net

Imports System.Data 
Imports System.Configuration 
Imports MySql.Data.MySqlClient 

Partial Class index 
    Inherits System.Web.UI.Page 
    Dim con As New MySqlConnection("Data Source=204.11.58.166;port=3306;Initial Catalog=quistaBooking;User Id=my_username;password=my_password ;") 

Protected Sub confirmBook_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles confirmBook.Click 

      Dim emailID, contactNo, source, destination, duration, distance, fare, datetime, vehicle As String 

      emailID = email.Text 
      contactNo = contact.Text 
      source = txtSource.Text 
      destination = txtDestination.Text 
      duration = dvDuration.Text 
      distance = dvDistance.Text 
      datetime = datetimepicker.Text 
      vehicle = selectVehicle.SelectedItem.ToString 

     Try 
      Dim str1 As String = "INSERT INTO logistics ('email', 'contact', 'source', 'destination', 'duration', 'distance', 'dateTime', 'vehicleType') values ('" + emailID + "', '" + contactNo + "', '" + source + "', '" + destination + "', '" + duration + "', '" + datetime + "', '" + vehicle + "')" 
      Dim data As MySqlDataReader 
      Dim adapter As New MySqlDataAdapter 
      Dim command As New MySqlCommand 
      command.CommandText = str1 
      command.Connection = con 
      adapter.SelectCommand = command 
      data = command.ExecuteReader 
      con.Close() 
     Catch ex As Exception 
      Response.Write(ex) 
     End Try 
    End Sub 
End Class 

Ошибка

System.InvalidOperationException: Соединение должно быть действительным и открытым. в MySql.Data.MySqlClient.MySqlConnection.Throw (Exception ex) в MySql.Data.MySqlClient.MySqlCommand.CheckState() в MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (поведение CommandBehavior) в MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() в index.confirmBook_Click (отправитель объекта, EventArgs e) в E: \ MY WEB \ Quista \ Website \ index.aspx.vb: строка 58

Может ли кто-нибудь помочь мне, где я ошибаюсь?

ОБНОВЛЕНО ОШИБКА

MySql.Data.MySqlClient.MySqlException (0x80004005): У вас ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' email ',' contact ',' source ',' destination ',' duration ',' distance ',' dateTime ',' в строке 1 на MySql.Data.MySqlClient.MySqlStream.ReadPacket() в MySql.Data.MySqlClient.NativeDriver.GetResult (Int32 & affectedRow, Int64 & insertedId) при MySql.Data.MySqlClient.Driver.GetResult (Int32, Int32 StatementId & affectedRows, Int64 & insertId) в MySql.Data.MySqlClient.Driver.NextResult (Int32 statementId, логическая сила) в MySql.Data.MySqlClient.MySqlDataReader.NextResult() в MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (поведение CommandBehavior) на MySql.Data .MySqlClient.MySqlCommand.ExecuteReader() в index.confirmBook_Click (отправитель объекта, EventArgs e) в E: \ MY WEB \ Quista \ Website \ index.aspx.vb: строка 59

ответ

0

Подключение должно быть действительным и открытым

Добавить con.Open() перед тем data = command.ExecuteReader

У Вас есть ошибка в вашем синтаксисе SQL

У вас есть 8 полей и попытаться вставить только 7 значений , Недостающее значение distance.

+0

Я пробовал это, но показывая некоторую другую ошибку. Пожалуйста, ознакомьтесь с обновленной ошибкой выше .. Спасибо –

1

Глядя на запрос SQL:

"INSERT INTO logistics 
('email', 'contact', 'source', 'destination', 'duration', 'distance', 'dateTime', 'vehicleType') 
values ('" + emailID + "', '" + contactNo + "', '" + source + "', '" + destination + "', '" + duration + "', '" + datetime + "', '" + vehicle + "')" 

Я уже видел вопросы:

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

Другие вещи:

  • соединения никогда не открыли
  • data = command.ExecuteReader не имеет смысла, потому что это INSERT нечего читать вы должны использовать command.ExecuteNonQuery()

Чем больше я смотрю на ваш код, тем больше вопросов я нахожу, я переписал его для вас:

Try 
    con.Open() 
    command.Connection = con 

    command.CommandText = "INSERT INTO logistics (`email`, `contact`, `source`, `destination`, `duration`, `distance`, `dateTime`, `vehicleType`) values (@emailID, @contactNo, @source, @destination, @duration, @datetime, @vehicle)" 
    command.Prepare() 
    command.Parameters.AddWithValue("@emailID", emailID) 
    command.Parameters.AddWithValue("@contactNo", contactNo) 
    command.Parameters.AddWithValue("@source", source) 
    command.Parameters.AddWithValue("@destination", destination) 
    command.Parameters.AddWithValue("@duration", duration) 
    command.Parameters.AddWithValue("@datetime", datetime) 
    command.Parameters.AddWithValue("@vehicle", vehicle) 
    command.Parameters.AddWithValue("@text", "One") 
    command.ExecuteNonQuery() 
Catch ex As MySqlException 
    MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
End Try