2016-09-29 3 views
0

Как вы вставляете данные в базу данных с помощью datetimepicker в VB.NET? Я попытался преобразовать его, используя: Format(name_of_the_datetimepicker.Value, "yyyy-MM-dd") в моем заявлении SQL, но я не знаю, где я ошибся.Проблемы с вставкой данных в mysql datetimepicker

Вот мой код:

Imports MySql.Data.MySqlClient 
    Public Class frmMain 
    Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles  MyBase.Load 

    If Not conn Is Nothing Then 
     conn.Close() 
    End If 

    conn = New MySqlConnection("Data Source=" & Server & ";user id=" & UserName & ";password=" & PassWord & ";database=" & DatabaseName & ";") 

    Try 
     conn.Open() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 


    End Sub 

    Private Sub btn_save_Click(sender As Object, e As EventArgs) Handles btn_save.Click 
    Dim cmdSave As MySqlCommand 
    Dim sql As String 
    sql = "INSERT INTO (rental_date, inventory_id, customer_id, return_date, staff_id) VALUES ('" & Format(dt_picker_rental_date.Value, "yyyy-MM-dd") & "', '" & txt_inventory_id.Text & "', '" & txt_customer_id.Text & "', '" & Format(dt_picker_return_date.Value, "yyyy-MM-dd") & "', '" & txt_staff_id.Text & "')" 


    Try 
     cmdSave = New MySqlCommand(sql, conn) 
     cmdSave.ExecuteNonQuery() 

     MsgBox("Success!") 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
    End Sub 
+0

Независимо от того, как вы его отформатировать, 'databases' не имеет свое собственное форматирование (то есть, если тип данных поля находится в 'datetime'). Чего вы хотите достичь здесь? –

+2

Вы не вставляете данные в базу данных с помощью 'DateTimePicker'. Вы используете 'DateTimePicker', чтобы позволить пользователю выбрать дату, и вы получите значение DateTime. То, что вы тогда делаете с этим 'DateTime', не имеет никакого отношения к' DateTimePicker'. Аналогично, вы вставляете значения 'DateTime' в базу данных так же, как вы вставляете любой другой пользовательский ввод: используя параметры. Если значение «DateTime» или другие данные поступают, это не имеет значения. Узнайте, как использовать параметры, и ваша проблема исчезнет. – jmcilhinney

ответ

1

НЕ использовать конкатенацию для вставки данных в код SQL. ВСЕГДА используйте параметры. Параметры сохраняют все данные в двоичной форме, поэтому формат никогда не является проблемой. Что еще более важно, вы защищены от SQL-инъекции. Использование даты, которые могли бы выглядеть следующим образом:

Dim command As New MySqlCommand("INSERT INTO MyTable (DateColumn) VALUES (@DateColumn)", connection) 

command.Parameters.AddWithValue("@DateColumn", myDateTimePicker.Value) 

Если вы хотите вставить только дату без времени, то используйте вместо того, чтобы просто Value.

Более подробная информация о параметрах ADO.NET здесь:

http://jmcilhinney.blogspot.com.au/2009/08/using-parameters-in-adonet.html

0

Попробуйте это. Это может вам помочь.

cmd.Parameters.Add («Дата», OleDbType.DBDate) .Value = DateTimePicker1.Value