Member 13174737 Ответов: 1

Преобразование из строки "DGL/C-2905" в тип "double" недопустимо.


First Entry is accepted on auto generate ID as DGL/C-2905. But After there is error as "Conversion from string "DGL/C- 2905" to type 'Double' is not valid."

Please advice if i need any correction on my coding.

Data Table column Name ClientID and Datatype - nvarchar(50)


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

Private Sub Autogenerated_Id()
        Dim Cmd As New SqlClient.SqlCommand
        Dim Con As New SqlClient.SqlConnection
        Con.ConnectionString = "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=dbase;Integrated Security=True;Pooling=False"
        Cmd.Connection = Con
        Con.Open()
        Dim Number As Integer
        Cmd.CommandText = "Select Max(ClientID) from Client"
        If IsDBNull(Cmd.ExecuteScalar) Then
            Number = 2905
            Tbcltid.Text = "DGL/C- " & Number
        Else
            Number = Cmd.ExecuteScalar + 1
            Tbcltid.Text = "DGL/C- " & Number
        End If
        Con.Close()
    End Sub

Member 13174737

Пожалуйста, обратите внимание, что я использовал текст только один раз, пожалуйста, посоветуйте, где я могу найти, что я использовал тот же текст, что и double.

ZurdoDev

"где я могу найти, что я использовал тот же текст, что и double."- сообщение об ошибке скажет вам точно, где.

[no name]

И как ты думаешь, что мы узнаем? У нас нет вашего кода, а у вас есть. Повторное повторение одного и того же снова и снова не даст вам лучших ответов, чем вы уже получили.

Member 13174737

тогда как первую запись принять ?? DGL/C-2905 принимает и сохраняет в базе данных, но DGL/C-2906 не принимает и является ошибкой.
На самом деле я новичок в этом деле vb.net мне нужен ваш совет, чтобы решить эту проблему.

ZurdoDev

1. отвечайте на комментарии. Не добавляйте свои собственные сами по себе.
2. Почему один спас, а другой нет? Потому что один был числом, а другой-нет.
Это так, так просто. Просто отладьте свой код и узнайте, что происходит. Столь простой.

[no name]

Покажите код, который выдает эту ошибку. Как вам уже было сказано. Этот код нигде ничего не сохраняет.

Member 13174737

Система.Которого вызывается invalidcastexception не обработано
Значение HRESULT=-2147467262
Сообщение=преобразование из строки "DGL/C-2905" в тип "Double" недопустимо.
Источник=Microsoft. VisualBasic
Трассировка стека:
в корпорации Microsoft.На языке VisualBasic.CompilerServices.Преобразования.ToDouble (Строковое Значение, NumberFormatInfo NumberFormat)
в корпорации Microsoft.На языке VisualBasic.CompilerServices.Операторы.AddObject(Объект Слева, Объект Справа)
в DSTAR_PROJECT.Клиенты.Autogenerated_Id () in E:\DSTAR-PROJECT\DSTAR-PROJECT\Clients.vb:line 131
в DSTAR_PROJECT.Клиенты.Cmdcltaddnew_Click(отправитель объекта, EventArgs e) in E:\DSTAR-PROJECT\DSTAR-PROJECT\Clients.vb:line 38
в системе.Окна.Формы.Контроль.OnClick(EventArgs e)
в системе.Окна.Формы.Кнопка.OnClick(EventArgs e)
в системе.Окна.Формы.Кнопка.OnMouseUp(MouseEventArgs mevent)
в системе.Окна.Формы.Контроль.WmMouseUp(Message& m, кнопка MouseButtons, Int32 клика)
в системе.Окна.Формы.Контроль.WndProc (Message& m)
в системе.Окна.Формы.ButtonBase.WndProc (Message& m)
в системе.Окна.Формы.Кнопка.WndProc (Message& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.OnMessage (Message& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.WndProc (Message& m)
в системе.Окна.Формы.Родное окно.DebuggableCallback(hwnd элемента указателя IntPtr, int32 и глутамат натрия, указателя IntPtr параметр wparam, указателя IntPtr lparam должен)
в системе.Окна.Формы.Небезопасные методы.DispatchMessageW(MSG& msg)
в системе.Окна.Формы.Приложение.ComponentManager.Система.Окна.Формы.Небезопасные методы.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoopInner(типа int32 причина, ApplicationContext контексте)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoop(типа int32 причина, ApplicationContext контексте)
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Выполнить(строка[] командной строки)
в DSTAR_PROJECT.Мой.Мое_приложение.Main (String[] Args) в 17d14f5c-a337-4978-8281-53493378c1071.vb: строка 81
в системе.AppDomain. _nExecuteAssembly (сборка RuntimeAssembly, String[] args)
в системе.домен приложений.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в корпорации Microsoft.VisualStudio.Хостингпроцесс.HostProc.RunUsersAssembly()
в системе.Нарезание резьбы.ThreadHelper.ThreadStart_Context(состояние объекта)
в системе.Нарезание резьбы.Параллельном режиме.RunInternal(параллельном режиме параллельном режиме, ContextCallback обратного вызова, состояние объекта, логическое preserveSyncCtx)
в системе.Нарезание резьбы.Параллельном режиме.Выполнения(в параллельном режиме параллельном режиме, ContextCallback обратного вызова, состояние объекта, логическое preserveSyncCtx)
в системе.Нарезание резьбы.ExecutionContext. Run(ExecutionContext executionContext, ContextCallback callback, состояние объекта)
в системе.Нарезание резьбы.ThreadHelper.ThreadStart()
InnerException: Система.Formatexception версия
Значение HRESULT=-2146233033
Сообщение=входная строка была не в правильном формате.
Источник=Microsoft. VisualBasic
Трассировка стека:
в корпорации Microsoft.На языке VisualBasic.CompilerServices.Преобразования.ParseDouble(Строковое Значение, NumberFormatInfo NumberFormat)
в корпорации Microsoft.На языке VisualBasic.CompilerServices.Преобразования.ToDouble (Строковое Значение, NumberFormatInfo NumberFormat)
Свойство innerexception:

Member 13174737

Number = Cmd. ExecuteScalar + 1
Этот код бросает ошибку
Брошенная " входная строка была не в правильном формате"

Member 13174737

Система Импорта.Данных.Поставщики sqlclient
Клиентам Открытый Класс
Private Sub Clients_Load(ByVal sender As System.Объект, бывал е как система.EventArgs) Обрабатывает MyBase. Load
Me. MdiParent = Form2
Конец Подводной Лодки
Private Sub cmdcltclose_Click(ByVal sender As System.Объект, бывал е как система.EventArgs) обрабатывает cmdcltclose.Щелчок
Если cmdcltclose.Text = "очистить", то
Tbcltid.Текст = ""
Tbcltname.Текст = ""
Tbcltadrs1.Текст = ""
Tbcltadrs2.Текст = ""
Tbcltcity.Текст = ""
Tbcltstate.Текст = ""
Tbcltpin.Текст = ""
Tbcltcountry.Текст = ""
Tbcltphone.Текст = ""
Tbcltfax.Текст = ""
Tbcltemail.Текст = ""
Tbcltpan.Текст = ""
Tbcltgst.Текст = ""
Tbcltcin.Текст = ""
Updwncurrency.Текст = ""
Updowncltcp.Текст = ""
Cmdcltaddnew.Text = " добавить новый"
Cmdcltsearch.поиск текста"
Cmdcltaddnew.Включен = Истина
Cmdcltsearch.Включен = Истина
cmdcltclose.Text = " закрыть"
Ещё
cmdcltclose.Text = " закрыть"
Меня.Рядом()
Конец, Если
Конец Подводной Лодки

Private Sub Cmdcltaddnew_Click(ByVal sender As System.Объект, бывал е как система.EventArgs) Обрабатывает Cmdcltaddnew.Щелчок
Если Cmdcltaddnew.Text = "добавить новый", то
MsgBox("вы хотите добавить нового клиента", MsgBoxStyle.Вопрос: "клиент")
Autogenerated_Id()
Cmdcltaddnew.Text = " сохранить"
Tbcltname.Включен = Истина
Tbcltadrs1.Включен = Истина
Tbcltadrs2.Включен = Истина
Tbcltcity.Включен = Истина
Tbcltstate.Включен = Истина
Tbcltpin.Включен = Истина
Tbcltcountry.Включен = Истина
Tbcltphone.Включен = Истина
Tbcltfax.Включен = Истина
Tbcltemail.Включен = Истина
Tbcltpan.Включен = Истина
Tbcltgst.Включен = Истина
Tbcltcin.Включен = Истина
Updwncurrency.Включен = Истина
Updowncltcp.Включен = Истина
Cmdcltsearch.Enabled = False
cmdcltclose.Text = " очистить"
Ещё
Попробуй
Если Tbcltname.Text = "" Или Tbcltemail.Text = "" Тогда
MsgBox ("Пожалуйста, Заполните Все Поля!", MsgBoxStyle.Восклицание: "клиент")
Ещё
Дим УМК Как Нового Sqlclient Как.Команда sqlcommand
Dim Con Как Новый SqlClient.SqlConnection
Dim Rd Как SqlDataReader
Зубрить.ConnectionString = " источник данных=(localdb)\MSSQLLocalDB; начальный каталог=dbase;Интегрированная безопасность=True;пул = False"
УМК.Подключение = Кон
Кон. Открыт()
УМК.CommandText = " Select ClientName From Client where ClientName = '" & Tbcltname.Текст &"'"
РД = ЦМД.Метода executereader
Если У РД. Есть Деньги, То
MsgBox ("имя клиента" & Tbcltname.Текст & "уже существует", MsgBoxStyle.Критично, " имя клиента")
Ещё
Cmd.CommandText = "Вставить в Client (ClientID, ClientName, Address1, Address2, City, State, PIN, Country, PhoneNo, FaxNo, EmailID, PANNo, GSTNo, CINNo, Currency, CreditPeriod) Values ​​('" & Tbcltid.Text & "','" & Tbcltname.Text & "','" & Tbcltadrs1.Text & "','" & Tbcltadrs2.Text & "','" & Tbcltcity.Text & "','" & Tbcltstate.Text & "','" & Tbcltpin.Text & "','" & Tbcltcountry.Text & "','" & Tbcltphone.Text & "','" & Tbcltfax.Text & "','" & Tbcltemail.Text & "','" & Tbcltpan.Text & "','" & Tbcltgst.Text & "','" & Tbcltcin.Text & "','" & Updwncurrency.Text & "','" & Updowncltcp.Text & "')"
Зубрить.Закрывать()
Кон. Открыт()
УМК.Метод executenonquery()
MsgBox("Сведения О Клиенте Успешно Сохранены", MsgBoxStyle.Информация, "клиент")
Tbcltid.Текст = ""
Tbcltname.Текст = ""

1 Ответов

Рейтинг:
1

Richard MacCutchan

Трассировка стека сообщает вам, где происходит ошибка:

at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Operators.AddObject(Object Left, Object Right)
at DSTAR_PROJECT.Clients.Autogenerated_Id() in E:\DSTAR-PROJECT\DSTAR-PROJECT\Clients.vb:line 131
at DSTAR_PROJECT.Clients.Cmdcltaddnew_Click(Object sender, EventArgs e) in E:\DSTAR-PROJECT\DSTAR-PROJECT\Clients.vb:line 38

Достаточно ясно, что, сохранив "DGL/C- 2905" в Tbcltid система пытается преобразовать его в двойное значение для ClientID, который, очевидно, потерпит неудачу. Вопросы заключаются в следующем: i) Почему вы используете типы texct для всех ваших значений базы данных и ii) почему вы пытаетесь сохранить значение ID как double типаж?

И учитывая, что вы создаете свой SQL-оператор, объединяя содержимое текстового поля вместе, у вас, вероятно, будет много проблем. Не делайте этого, это крайне опасно и оставляет вашу систему уязвимой для SQL-инъекций, а также повреждения или потери всех ваших данных.

Вам нужно перекодировать это, чтобы использовать правильные переменные параметров в качестве входных данных для вашего оператора SQL и правильного преобразования исходных данных в типы назначения.


Member 13174737

Большое спасибо, хорошо, позвольте мне попытаться сделать эту запись, чтобы использовать переменную параметра. если возникнет какая-либо ошибка, Я попрошу вас о помощи.

Member 13174737

не могли бы вы посоветовать, как вставить параметр use правильно или неправильно (например, 2data)
Cmd. CommandText = " вставить в клиент(ClientID, ClientName) значения (@ Tbcltid, @Tbcltname)"
УМК.Параметры.AddWithValue (@Tbcltid, " Tbcltid. Text")
УМК.Параметры.AddWithValue (@Tbcltname, " Tbcltname.Текст")

Member 13174737

Та же ошибка Теперь "преобразование из строки" DGL/C-2905 "в тип" double " недопустимо."

Richard MacCutchan

Вы не можете преобразовать строку букв в двойной тип. Вам нужно вернуться к своим справочным руководствам и изучить основы C#. Вам также нужно научиться правильно передавать параметры командам SQL. Существует множество доступных документов,которые прояснят все эти вещи.

Member 13174737

Спасибо, теперь он работает, я создал ID, который является Int, и сделал формулу в базе данных sql server с префиксом + id number.
он работает нормально.
Еще раз большое спасибо кодовым проектам и участникам. Вы, ребята, здорово помогаете.