vb. net оператор вставки: sql Ошибка преобразования типа данных varchar в числовой - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь вставить данные из vb. net в SQL серверную базу данных.

Моя таблица:

CREATE TABLE [dbo].[gsb_dtab]
(
    [gsb_sno] [int] IDENTITY(1,1) NOT NULL,
    [gsb_date] [date] NOT NULL,
    [gsb_quality] [nchar](20) NOT NULL,
    [gsb_stype] [nchar](1) NOT NULL,
    [gsb_taka] [int] NULL
)

VB. NET код:

cmd.CommandText = "INSERT INTO gsb_dtab (gsb_date, gsb_quality, gsb_taka) 
                   VALUES('" + out_date + "','" + se_qcombo.Text + "','" + txt_taka.Text + "');"

Я хочу сохранить следующие значения:

  • out_date = 2020-05-03
  • se_qcombo = Ranial
  • txt_taka = 48

но SQL Сервер выдает ошибку:

Ошибка преобразования типа данных varchar в число c

Ошибка возникает в txt_taka вставка; когда я игнорирую txt_taka, тогда данные вставляются успешно.

Я использую SQL Server 2008 R2 и vb. net 2010

Пожалуйста, помогите - что я могу сделать?

Ответы [ 3 ]

0 голосов
/ 03 мая 2020

Поместите строки в апострофы, но не делайте это с числами. Формат значений даты должен быть «гггг-мм-дд» или «гггг-мм-дд чч: мм: сс». Также используйте «&» для конкатенации строк, поскольку «+» может привести к странным ошибкам. И точка с запятой в конце не нужна. Таким образом, код может выглядеть так:

Dim SQL As String = "INSERT INTO gsb_dtab (gsb_date, gsb_quality, gsb_taka) " &
    "VALUES(" & Strings.Format(out_date, "\'yyyy-MM-dd\'") &
    ", '" & se_qcombo.Text & "', " & txt_taka.Text & ")"

cmd.CommandText = SQL
0 голосов
/ 04 мая 2020

Не объединять строки для построения .CommandText. Вы будете открыты для sql инъекции, а вам .CommandText будет намного сложнее читать и поддерживать.

Блок Using...End Using гарантирует, что ваше соединение и команда закрыты и удалены даже в случае ошибки.

Private Sub InsertSomething(out_date As Date)
    Dim sqlString = "INSERT INTO gsb_dtab (gsb_date, gsb_quality, gsb_taka) 
               VALUES(@Date, @seq, @taka);"
    Using cn As New SqlConnection("Your connection string"),
            cmd As New SqlCommand(sqlString, cn)
        cmd.Parameters.Add("@Date", SqlDbType.Date).Value = out_date
        cmd.Parameters.Add("@seq", SqlDbType.NVarChar, 20).Value = se_qcombo.Text
        cmd.Parameters.Add("@taka", SqlDbType.Int).Value = CInt(txt_taka.Text)
        cn.Open()
        cmd.ExecuteNonQuery()
    End Using
End Sub
0 голосов
/ 03 мая 2020

Пожалуйста, используйте код ниже.

cmd.CommandText = "INSERT INTO gsb_dtab (gsb_date, gsb_quality, gsb_taka) 
               VALUES('" + out_date + "','" + se_qcombo.Text + "','" + Convert.toInt32(txt_taka.Text) + "');"

Вам необходимо преобразовать значение типа int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...