Member 14137756 Ответов: 1

Datatable получает дату в формате (01\dd\yyyy) из результата SQL - запроса в VB.NET приложение, которое я создаю для windows 10


Привет, я новичок в этом деле. VB.net и этот форум. Я портирую приложение VB, чтобы оно было совместимо с windows 10. Результат datatable отображает даты неправильно даты отображаются в формате '01\dd\yyyy' месяц идет правильно, тогда как дата и год неправильны.

Тот же код работает правильно в случае Windows 7, и он не работает для windows 10. Пожалуйста, дайте мне знать, если с моей стороны потребуется какой-либо вклад.

Public Function GetIntegrationLogs( _
                   ByVal FileType As String, _
                   ByVal dtFrom As Date, _
                  ByVal dtTo As Date) As DataTable

        Try
#If ORACLE Then
            Dim dtSC As New DataTable
            Dim adaptSC As New OracleDataAdapter

            'Dim myCommand As New OracleCommand("GetIntegrationLogs", deCCAS.Connection)
            'myCommand.CommandType = CommandType.StoredProcedure
            'myCommand.Parameters.Add("v_FileType", FileType)
            'myCommand.Parameters.Add("v_StartDate", dtFrom)
            'myCommand.Parameters.Add("v_EndDate", dtTo)

            'reader = 

            Dim objCommand As New OracleCommand("GetIntegrationLogs", deCCAS.Connection)
            adaptSC.SelectCommand = objCommand
            Dim sysRefCursor As New OracleParameter
            With sysRefCursor
                .OracleDbType = OracleDbType.RefCursor
                .Direction = ParameterDirection.Output
            End With
            With objCommand
                .CommandType = CommandType.StoredProcedure
                .Parameters.Add("v_FileType", FileType)
                .Parameters.Add("v_StartDate", dtFrom)
                .Parameters.Add("v_EndDate", dtTo)
                .Parameters.Add(sysRefCursor)
            End With

            Dim da As OracleDataAdapter = New OracleDataAdapter(objCommand)
            adaptSC.Fill(dtSC)


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

Я попытался изменить datatable на dataset, но безуспешно.

1 Ответов

Рейтинг:
2

OriginalGriff

Если значение всегда возвращается в определенном формате, а это не формат DateTime по умолчанию для машины, то хранимая процедура возвращает строковое значение даты, которое является:
1) глупо. Никогда не конвертируйте в строки до последнего момента - это единственный раз, когда вы получаете доступ к фактической культуре пользователя и формату, который он предпочитает.
2) вне нашего контроля.

Так что у вас есть два варианта:
1) исправьте SP, чтобы он возвращал либо другой формат (плохой), либо фактическое значение DateTime (хорошее).
2) Используйте DateTime.TryParseExact преобразует значения, возвращаемые SP, в DateTime, а затем отображает их - предпочтительно в предпочитаемом пользователями формате культуры.


Member 14137756

Спасибо за ответ. Я не преобразовал ни одной строки результат, который я получаю из хранимой процедуры через VB, находится в формате 01\DD\YYYY. Я получаю неправильный формат даты во всем приложении. Я не знаком с этим VB.net или .net-фреймворки. Я пытаюсь изменить совместимость приложения с windows 7 на windows 10 приложение дает правильные результаты, когда я запускаю его в windows 7, но даты неверны в Win 10.

Подсказки будут оценены по достоинству. Я не понял 1-го пункта, где вы предлагаете изменить SP, не могли бы Вы уточнить то же самое.

заранее спасибо

OriginalGriff

Значения DateTime не имеют формата - они получают его только при преобразовании в строки для отображения, после чего они либо используют формат по умолчанию для машины, либо определенный формат, который предоставляется при использовании ToString или string.Формат называется. Если даты возвращаются из SQL в определенном формате, они уже являются строками, и это означает, что либо SP преобразует их, либо дизайн БД хранит их в столбце VARCHAR или NVARCHAR.

Если все ваше приложение получает "неправильный формат", это происходит потому, что вы форматируете их (явно или неявно), используя формат даты по умолчанию, установленный на компьютере, и это не тот формат, который вы хотели. Проверьте раздел "время и язык" приложения "Настройки" и прокрутите вниз до пункта "форматы".

Member 14137756

Большое спасибо, Грифф :) Он работал :) Я работаю над этим с прошлой недели и наконец это сделано

OriginalGriff

Всегда пожалуйста!

Member 14137756

По умолчанию формат windows 10 будет M/DD/YY я изменил его на MM/DD/YYYY, и это сработало