'Преобразование из строки "dd-MM-YYYY" в тип "Integer" недопустимо.' - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть запрос на вставку с использованием базы данных SQL. Запрос вставки работает хорошо, но когда я использую DateTimePicker, он показывает сообщение об ошибке выше.
Можете ли вы сказать мне, как использовать DateTimePicker в запросе вставки?

    Public Function SearchData(ByVal qr As String) As DataSet
        da = New SqlDataAdapter(qr, con)
        ds = New DataSet
        da.Fill(ds)
        Return ds
    End Function

    Private Sub SaveEmp_Click(sender As Object, e As EventArgs) Handles SaveEmp.Click

        Dim ms As New MemoryStream
        PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
        Dim img() As Byte
        img = ms.ToArray()

        Dim insertquery As String = "Insert into AddNew(Userid,EmpSalary,EmpName,FatherName,EmailAddress,BankAccount,HomeAddress,PersonalMobile,DateofBirth,EmpImage) values(" & EmpID.Text _
 & "," & EmpSalary.Text & ",'" & EmpName.Text & "','" & FatherName.Text & "','" & EmailAddress.Text & "'," & BankAccount.Text & ",'" & HomeAddress.Text & "'," & PersonalMobile.Text & ",'" & DtpDOB.Value.Date.ToShortDateString("dd-MM-YYYY") & "',@img)"

        Dim cmd As New SqlCommand(insertquery, con)
        cmd.Parameters.Add("@img", SqlDbType.Image).Value = img
        ExecuteMyQuery(cmd, "Image Inserted")
    End Sub

1 Ответ

1 голос
/ 04 апреля 2020

Чтобы ответить на заданный вопрос, эта часть кода не имеет смысла:

DtpDOB.Value.Date.ToShortDateString("dd-MM-YYYY")

Вы должны были уже прочитать соответствующую документацию и решить проблему для себя. Это сказало бы, что у метода ToShortDateString нет параметров. Весь смысл этого метода в том, что он возвращает указанную дату, используя стандартный формат короткой даты для текущей системы. Это:

DtpDOB.Value.Date.ToShortDateString()

эквивалентно следующему:

DtpDOB.Value.Date.ToString("d")

Если вы хотите определенный формат c, независимо от настроек системы, вам нужно вызвать ToString и передать соответствующую строку пользовательского формата:

DtpDOB.Value.Date.ToString("dd-MM-YYYY")

На самом деле происходит то, что компилятор делает наилучшее предположение о том, что вы пытаетесь выполнить sh и думает, что вы пытаетесь проиндексировать String, возвращаемый ToShortDateString, то есть

DtpDOB.Value.Date.ToShortDateString()("dd-MM-YYYY")

или следующим образом:

Dim str As String = DtpDOB.Value.Date.ToShortDateString()
Dim ch As Char = str("dd-MM-YYYY")

Это не удается, поскольку для индексации требуется Integer и эту строку формата нельзя преобразовать в Integer, отсюда и сообщение об ошибке.

Помимо использования параметров для ADO. NET, что делает формат неактуальным, вам также следует включить Option Strict On в свойствах вашего проекта и параметрах IDE.

...