Member 11765123 Ответов: 2

Проблема при попытке вставить данные: ошибка при преобразовании типа данных nvarchar в числовой.


Dim cm As New SqlCommand
cm.Connection = con
cm.Connection.Open()
cm.CommandText = "Insert into tblsim ([sn],[dir],[alt],[plans],[rate],[addon],[cm]) values (@sn,@dir,@alt,@plans,@rate,@addon,@cm)"
If tssn.Text.Trim.Length = 0 Then
    cm.Parameters.AddWithValue("@sn", SqlDataType.Numeric).Value = DBNull.Value
Else
    cm.Parameters.AddWithValue("@sn", SqlDataType.Numeric).Value = tssn.Text
End If

If tsdir.Text.Trim.Length = 0 Then
    cm.Parameters.AddWithValue("@dir", SqlDataType.Numeric).Value = DBNull.Value
Else
    cm.Parameters.AddWithValue("@dir", SqlDataType.Numeric).Value = tsdir.Text
End If

If tsalt.Text.Trim.Length = 0 Then
    cm.Parameters.AddWithValue("@alt", SqlDataType.Numeric).Value = DBNull.Value
Else
    cm.Parameters.AddWithValue("@alt", SqlDataType.Numeric).Value = tsalt.Text
End If

If cmbplans.Text.Trim.Length = 0 Then
    cm.Parameters.AddWithValue("@plans", SqlDataType.Numeric).Value = DBNull.Value
Else
    cm.Parameters.AddWithValue("@plans", SqlDataType.Numeric).Value = cmbplans.Text
End If
If cmbrate.Text.Trim.Length = 0 Then
    cm.Parameters.AddWithValue("@rate", SqlDataType.NVarChar).Value = DBNull.Value
Else
    cm.Parameters.AddWithValue("@rate", SqlDataType.NVarChar).Value = cmbrate.Text
End If
If cmbaddon.Text.Trim.Length = 0 Then
    cm.Parameters.AddWithValue("@addon", SqlDataType.NVarChar).Value = DBNull.Value
Else
    cm.Parameters.AddWithValue("@addon", SqlDataType.NVarChar).Value = cmbaddon.Text
End If
If tscm.Text.Trim.Length = 0 Then
    cm.Parameters.AddWithValue("@cm", SqlDataType.NVarChar).Value = DBNull.Value
Else
    cm.Parameters.AddWithValue("@cm", SqlDataType.NVarChar).Value = tscm.Text
End If
cm.ExecuteNonQuery()
MsgBox("Record has been saved successfully", MsgBoxStyle.Information)
cm.Connection.Close()

CREATE TABLE [dbo].[tblsim](
	[simid] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
	[sn] [numeric](18, 0) NOT NULL,
	[dir] [numeric](18, 0) NOT NULL,
	[alt] [numeric](18, 0) NULL,
	[plans] [numeric](18, 0) NULL,
	[rate] [numeric](18, 0) NULL,
	[addon] [numeric](18, 0) NULL,
	[cm] [nvarchar](500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_tblsim_1] PRIMARY KEY CLUSTERED 
(
	[simid] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]


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

Я сталкиваюсь с проблемой, когда пытаюсь вставить данные: ошибка при преобразовании типа данных из NVarchar в Numeric.

Следует отметить, что значение, которое должно быть вставлено в столбец "simid", имеет длину 20 цифр. например, 28808399937872736628.
Я также попытался вставить, изменив тип данных столбца на "BigInt" и Nvarchar, но все равно это не работает!
С Уважением: Шахид

Sergey Alexandrovich Kryukov

Не используйте nvarchar для хранения числовых данных. Используйте соответствующие типы данных. Однако Да, он может вам понадобиться для больших точных чисел.
Что такое "Бигинт"? существует система типов.Численные данные.Типа BigInteger. Это просто работает.
—СА

Member 11765123

Спасибо!! но как мне кодировать систему?Численные данные.BigInteger ' in vb.net когда я объявляю тип данных sql следующим образом:
см.Параметры.AddWithValue ("@sn", SqlDataType.Numeric).Значение = ЦСН.Текст

Sergey Alexandrovich Kryukov

Я ответил в решении 3.
—СА

2 Ответов

Рейтинг:
4

Sergey Alexandrovich Kryukov

Вы можете разобрать строку, полученную из базы данных, чтобы интерпретировать ее как экземпляр System.Numerics.BigInteger:
Типа BigInteger.Метод Синтаксического Анализа (String) (System.Численные данные).

—СА


Member 11765123

большое вам спасибо!!

Sergey Alexandrovich Kryukov

Добро пожаловать.
Удачи, звоните еще.
—СА

Рейтинг:
16

Anisuzzaman Sumon

If cmbrate.Text.Trim.Length = 0 Then
    cm.Parameters.AddWithValue("@rate", SqlDataType.NVarChar).Value = DBNull.Value
Else
    cm.Parameters.AddWithValue("@rate", SqlDataType.NVarChar).Value = cmbrate.Text


вот в чем твоя проблема.

Вы определили скорость как числовую(
[rate] [numeric](18, 0) NULL,
) но в этом коде вы использовали
SqlDataType.NVarChar
вместо SqlDataType. Numeric

Также обратите внимание, что вы определили [addon] [numeric](18, 0) NULL,
так же ошибка происходит и здесь
If cmbaddon.Text.Trim.Length = 0 Then
    cm.Parameters.AddWithValue("@addon", SqlDataType.NVarChar).Value = DBNull.Value
Else
    cm.Parameters.AddWithValue("@addon", SqlDataType.NVarChar).Value = cmbaddon.Text
End If


исправить это . Я думаю, что весь код будет идти правильно


Member 11765123

Спасибо! Это работает. но как я могу сохранить 20-значное число в столбце "sn"? Я хочу, чтобы сохранить серийный номер SIM-карты, что является, например, 20038880999209902810? Я также попробовал тип данных "BigInt", но он все равно не работает!!

Anisuzzaman Sumon

сохранить в базе данных как varchar(20) или nvarchar(20)).
Если вам нужно выполнить операцию там после этого как число то вы можете разобрать
в числовые типы с использованием методов Decimal.Parse() или Int64.Parse ().

Member 11765123

большое вам спасибо!!