Конкат строки приводит к странному преобразованию строки в двойное - PullRequest
0 голосов
/ 03 июня 2019

Понятия не имею, что происходит с этим кодом. Я смотрел на это с разных точек зрения на то, что может быть причиной этой проблемы, и все обнулено.

Итак, проблема в том, что после определенного количества символов мой код пытается выполнить строку для двойного преобразования самостоятельно во время строкового контката. Я искал любые входные данные, которые я не преобразовывал в строку, проверял на отсутствие "или + операнды, я даже пытался перемещать разделы кода, чтобы посмотреть, было ли это конкретное значение элемента управления страницей, вызывающее проблему.

Ничего не работает, независимо от того, какие поля я добавляю в конкатенацию, он пытается преобразовать строку в двойное число после примерно 16-20 символов.

Вот конкат, который вызывает проблемы:

thCValLst = "AhcccsGroup = " + If(ThCredAhcsGrpCBox.Checked, "1", "0") + ", NPI = '" + ThCredNPITBox.Text + "', AhcccsActive = " + If(ThCredAhcsActCBox.Checked, "1", "0") + "', DriversLicense = '"
                thCValLst += ThCredDrvLicTBox.Text + "', EINNumber = '" + ThCredEINTBox.Text + "', Credentials = '" + ThCredCredTBox.Text + "', Contracted = '" + ThCredConTBox.Text + "', Notes = '" + ThCredNotesTBox.Text + "', CPRExpDate = '"
                thCValLst += CType(ThCredCPREDDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd") + "', LCRExpDate = '" + CType(ThCredLCREDDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd") + "', FingerPrintTakenDate = '"
                thCValLst += CType(ThCredFPTDDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd") + "', FingerPrintExpDate = '" + CType(ThCredFPEDDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd") + "', LicenseNumber = '" + ThCredLicNumTBox.Text
                thCValLst += "', LicenseExpDate = '" + CType(ThCredLEDDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd") + "', InsuranceExpDate = '" + CType(ThCredIEDDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd") + "', Article9ExpDate = '"
                thCValLst += CType(ThCredA9DDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd") + "', MalpracticeDate = " + If(ThCredMPDDTP.SelectedDate Is Nothing, "NULL", "'" + CType(ThCredMPDDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd") + "'")
                thCValLst += ", PreSuppExpiration = " + If(ThCredPSEDDTP.SelectedDate Is Nothing, "NULL", "'" + CType(ThCredPSEDDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd") + "'") + ", TermDate = '" + CType(ThCredTDDTP.SelectedDate, DateTime).ToString("yyyy-MM-dd")
                thCValLst += "', BillingAuthSheet = " + If(ThCredABSCBox.Checked, "1", "0") + ", SignedContract = " + If(ThCredSCCBox.Checked, "1", "0") + ", PayrollInfo = " + If(ThCredPRICBox.Checked, "1", "0") + ", W9 = " + If(ThCredW9CBox.Checked, "1", "0")
                thCValLst += ", Resume = " + If(ThCredResCBox.Checked, "1", "0") + ", Referenece = " + If(ThCredRefCBox.Checked, "1", "0") + ", Orientation = " + If(ThCredOrtCBox.Checked, "1", "0") + ", InsCode1 = '" + ThCredInsCd1TBox.Text + "', InsCode2 = '"
                thCValLst += ThCredInsCd2TBox.Text + "', Facility = '" + ThCredFacTBox.Text = "', ModifiedOn = GetDate(), ModifiedBy = '" + curUsr.GetUsrName() + "'"

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

thCValLst определен: Dim thCValLst As String = "" и никогда не используется до этого момента в моем коде. У меня есть другие конкататы, подобные этому чуть выше в коде, и это нормально. Я чувствую, что что-то упустил, но не могу понять, что. Все выглядит так, как должно быть правильно.

Uncaught Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: преобразование из строки «AhcccsGroup = 1, NPI =« 12345678 »в тип« Double »недопустимо. в Function.Error.create (https://clinic.h2tportal.com/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl00_MainContent_RadScriptManager1_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3ac9c7ac0d-8fa4-44a7-8b1a-8b20d0589515%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%3aen-US%3a48e0f2bb-99f7-43cd-9b8e-5b9bce752872%3a16e4e7cd%3af7645509%3a22a6274a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a88144a7a%3a1e771326%3ac8618e41%3a1a73651d%3a16d8629e%3aed16cbdc%3a962f9868%3a73973f5b%3a578015a3%3af46195d3%3a58366029%3aaa288e2d%3a258f1c72%3ae4f8f289%3a333f8d94%3a4cd1fec6%3a77613e24%3af0c58c30%3a9b7cc2d2%3a69667591%3aec7335e%3ad944e0f6%3ac442ac3f%3a8d1fecce%3a6b6b9ee5%3a595e7652%3a92fe8ea0%3afa31b949%3a4877f69a%3a874f8ea2%3a19620875%3a490a9d4e%3a7c926187%3a8674cba1%3a2e42e72a%3aef347303%3ab7778d6c%3ac08e9f8a%3aa51ee93e%3a59462f1%3a82923ac3%3a6d43f6d9%3ac172ae1e%3a9cdfc6e7:6:2736) at Sys.WebForms.PageRequestManager._createPageRequestManagerServerError (https://clinic.h2tportal.com/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl00_MainContent_RadScriptManager1_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3ac9c7ac0d-8fa4-44a7-8b1a-8b20d0589515%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%3aen-US%3a48e0f2bb-99f7-43cd-9b8e-5b9bce752872%3a16e4e7cd%3af7645509%3a22a6274a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a88144a7a%3a1e771326%3ac8618e41%3a1a73651d%3a16d8629e%3aed16cbdc%3a962f9868%3a73973f5b%3a578015a3%3af46195d3%3a58366029%3aaa288e2d%3a258f1c72%3ae4f8f289%3a333f8d94%3a4cd1fec6%3a77613e24%3af0c58c30%3a9b7cc2d2%3a69667591%3aec7335e%3ad944e0f6%3ac442ac3f%3a8d1fecce%3a6b6b9ee5%3a595e7652%3a92fe8ea0%3afa31b949%3a4877f69a%3a874f8ea2%3a19620875%3a490a9d4e%3a7c926187%3a8674cba1%3a2e42e72a%3aef347303%3ab7778d6c%3ac08e9f8a%3aa51ee93e%3a59462f1%3a82923ac3%3a6d43f6d9%3ac172ae1e%3a9cdfc6e7:15:11490) в Sys.WebForms.PageRequestManager._parseDelta (https://clinic.h2tportal.com/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl00_MainContent_RadScriptManager1_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3ac9c7ac0d-8fa4-44a7-8b1a-8b20d0589515%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%3aen-US%3a48e0f2bb-99f7-43cd-9b8e-5b9bce752872%3a16e4e7cd%3af7645509%3a22a6274a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a88144a7a%3a1e771326%3ac8618e41%3a1a73651d%3a16d8629e%3aed16cbdc%3a962f9868%3a73973f5b%3a578015a3%3af46195d3%3a58366029%3aaa288e2d%3a258f1c72%3ae4f8f289%3a333f8d94%3a4cd1fec6%3a77613e24%3af0c58c30%3a9b7cc2d2%3a69667591%3aec7335e%3ad944e0f6%3ac442ac3f%3a8d1fecce%3a6b6b9ee5%3a595e7652%3a92fe8ea0%3afa31b949%3a4877f69a%3a874f8ea2%3a19620875%3a490a9d4e%3a7c926187%3a8674cba1%3a2e42e72a%3aef347303%3ab7778d6c%3ac08e9f8a%3aa51ee93e%3a59462f1%3a82923ac3%3a6d43f6d9%3ac172ae1e%3a9cdfc6e7:15:29608) в Sys.WebForms.PageRequestManager._onFormSubmitCompleted (https://clinic.h2tportal.com/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl00_MainContent_RadScriptManager1_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3ac9c7ac0d-8fa4-44a7-8b1a-8b20d0589515%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%3aen-US%3a48e0f2bb-99f7-43cd-9b8e-5b9bce752872%3a16e4e7cd%3af7645509%3a22a6274a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a88144a7a%3a1e771326%3ac8618e41%3a1a73651d%3a16d8629e%3aed16cbdc%3a962f9868%3a73973f5b%3a578015a3%3af46195d3%3a58366029%3aaa288e2d%3a258f1c72%3ae4f8f289%3a333f8d94%3a4cd1fec6%3a77613e24%3af0c58c30%3a9b7cc2d2%3a69667591%3aec7335e%3ad944e0f6%3ac442ac3f%3a8d1fecce%3a6b6b9ee5%3a595e7652%3a92fe8ea0%3afa31b949%3a4877f69a%3a874f8ea2%3a19620875%3a490a9d4e%3a7c926187%3a8674cba1%3a2e42e72a%3aef347303%3ab7778d6c%3ac08e9f8a%3aa51ee93e%3a59462f1%3a82923ac3%3a6d43f6d9%3ac172ae1e%3a9cdfc6e7:15:25637) в массиве. (https://clinic.h2tportal.com/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl00_MainContent_RadScriptManager1_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3ac9c7ac0d-8fa4-44a7-8b1a-8b20d0589515%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%3aen-US%3a48e0f2bb-99f7-43cd-9b8e-5b9bce752872%3a16e4e7cd%3af7645509%3a22a6274a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a88144a7a%3a1e771326%3ac8618e41%3a1a73651d%3a16d8629e%3aed16cbdc%3a962f9868%3a73973f5b%3a578015a3%3af46195d3%3a58366029%3aaa288e2d%3a258f1c72%3ae4f8f289%3a333f8d94%3a4cd1fec6%3a77613e24%3af0c58c30%3a9b7cc2d2%3a69667591%3aec7335e%3ad944e0f6%3ac442ac3f%3a8d1fecce%3a6b6b9ee5%3a595e7652%3a92fe8ea0%3afa31b949%3a4877f69a%3a874f8ea2%3a19620875%3a490a9d4e%3a7c926187%3a8674cba1%3a2e42e72a%3aef347303%3ab7778d6c%3ac08e9f8a%3aa51ee93e%3a59462f1%3a82923ac3%3a6d43f6d9%3ac172ae1e%3a9cdfc6e7:6:307) в https://clinic.h2tportal.com/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl00_MainContent_RadScriptManager1_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3ac9c7ac0d-8fa4-44a7-8b1a-8b20d0589515%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%3aen-US%3a48e0f2bb-99f7-43cd-9b8e-5b9bce752872%3a16e4e7cd%3af7645509%3a22a6274a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a88144a7a%3a1e771326%3ac8618e41%3a1a73651d%3a16d8629e%3aed16cbdc%3a962f9868%3a73973f5b%3a578015a3%3af46195d3%3a58366029%3aaa288e2d%3a258f1c72%3ae4f8f289%3a333f8d94%3a4cd1fec6%3a77613e24%3af0c58c30%3a9b7cc2d2%3a69667591%3aec7335e%3ad944e0f6%3ac442ac3f%3a8d1fecce%3a6b6b9ee5%3a595e7652%3a92fe8ea0%3afa31b949%3a4877f69a%3a874f8ea2%3a19620875%3a490a9d4e%3a7c926187%3a8674cba1%3a2e42e72a%3aef347303%3ab7778d6c%3ac08e9f8a%3aa51ee93e%3a59462f1%3a82923ac3%3a6d43f6d9%3ac172ae1e%3a9cdfc6e7:6:51370 на Sys.Net.WebRequest.completed (https://clinic.h2tportal.com/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl00_MainContent_RadScriptManager1_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3ac9c7ac0d-8fa4-44a7-8b1a-8b20d0589515%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%3aen-US%3a48e0f2bb-99f7-43cd-9b8e-5b9bce752872%3a16e4e7cd%3af7645509%3a22a6274a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a88144a7a%3a1e771326%3ac8618e41%3a1a73651d%3a16d8629e%3aed16cbdc%3a962f9868%3a73973f5b%3a578015a3%3af46195d3%3a58366029%3aaa288e2d%3a258f1c72%3ae4f8f289%3a333f8d94%3a4cd1fec6%3a77613e24%3af0c58c30%3a9b7cc2d2%3a69667591%3aec7335e%3ad944e0f6%3ac442ac3f%3a8d1fecce%3a6b6b9ee5%3a595e7652%3a92fe8ea0%3afa31b949%3a4877f69a%3a874f8ea2%3a19620875%3a490a9d4e%3a7c926187%3a8674cba1%3a2e42e72a%3aef347303%3ab7778d6c%3ac08e9f8a%3aa51ee93e%3a59462f1%3a82923ac3%3a6d43f6d9%3ac172ae1e%3a9cdfc6e7:6:89728) в XMLHttpRequest._onReadyStateChange (https://clinic.h2tportal.com/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ctl00_MainContent_RadScriptManager1_TSM&compress=1&_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d4.0.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3ac9c7ac0d-8fa4-44a7-8b1a-8b20d0589515%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%3aen-US%3a48e0f2bb-99f7-43cd-9b8e-5b9bce752872%3a16e4e7cd%3af7645509%3a22a6274a%3a24ee1bba%3ae330518b%3a2003d0b8%3ac128760b%3a88144a7a%3a1e771326%3ac8618e41%3a1a73651d%3a16d8629e%3aed16cbdc%3a962f9868%3a73973f5b%3a578015a3%3af46195d3%3a58366029%3aaa288e2d%3a258f1c72%3ae4f8f289%3a333f8d94%3a4cd1fec6%3a77613e24%3af0c58c30%3a9b7cc2d2%3a69667591%3aec7335e%3ad944e0f6%3ac442ac3f%3a8d1fecce%3a6b6b9ee5%3a595e7652%3a92fe8ea0%3afa31b949%3a4877f69a%3a874f8ea2%3a19620875%3a490a9d4e%3a7c926187%3a8674cba1%3a2e42e72a%3aef347303%3ab7778d6c%3ac08e9f8a%3aa51ee93e%3a59462f1%3a82923ac3%3a6d43f6d9%3ac172ae1e%3a9cdfc6e7:6:84327)

1 Ответ

0 голосов
/ 03 июня 2019

Если честно, я удивлен, что ваш код даже компилируется, потому что в конце каждой строки нет символа конкатенации String.

Следует учесть, что хотя для объединения строк в Visual Basic допустимо использовать оператор +, предпочтительно использовать оператор &. Это позволит избежать двусмысленности между конкатенацией строк и математическим оператором для сложения.

Что еще нужно учитывать, это то, что, в зависимости от используемой версии Visual Studios, вы должны рассмотреть возможность использования String Interpolation или String.Format для форматирования вашей String.

Строковая интерполяция Представленный в Visual Basic 14, он позволяет вам интерполировать ваши строки. Две строки в следующем коде возвращают одну и ту же строку (при условии, что имена переменных):

Dim foo As String = $"{variable1}: {variable2} - {variable3}"
Dim bar As String = variable1 & ": " & variable2 & " - " & variable2

В этом случае значения, представленные в variable1, variable2 и variable3, будут включены в String, но обратите внимание, насколько проще читать литерал String. Более того, IDE Visual Studio по-разному окрашивает интерполированные переменные.

String.Format Является своего рода предшественником интерполяции String. Две строки в следующем коде делают то же самое, что и выше:

Dim foo As String = String.Format("{0}: {1} - {2}", variable1, variable2, variable3)
Dim bar As String = variable1 & ": " & variable2 & " - " & variable2

Я бы предложил вам воспользоваться одним из двух описанных методов и посмотреть, поможет ли это.

P.S. - Я заметил, что вы делаете некоторые преобразования типов, такие как CType(ThCredFPTDDTP.SelectedDate, DateTime). На самом деле нет причин для этого, так как вы конвертируете его из Date в Date в String. Если вы хотите преобразовать переменную DateTime в String, вызовите метод ToString, при желании передавая желаемый формат: ThCredFPTDDTP.SelectedDate.ToString("mm/dd/yyyy")

Это предложение было недействительным, поскольку элементы управления являются пользовательскими элементами управления сторонних производителей

P.S.S. - После нашего разговора было определено, что человек, от которого вы унаследовали код, пытался создать строку запроса SQL, передавая значения в строке запроса, то есть используя запрос без параметров. Я бы посоветовал вам преобразовать код, чтобы использовать параметры для очевидных преимуществ SQL, а также для улучшения читабельности.

...