DARK__FOXX Ответов: 2

Как вставить дату поля значения внутри таблицы в БД ?


Привет,
У меня есть это поле значения, которое он вставляет в новую таблицу, но у меня есть два coloumn, которые они вставляют в другую таблицу.
Это значение вставляется Пользователем в поле ASP.NET текстовое поле.
Когда пользователь нажимает на кнопку Сохранить, если это значение еще не вставлено, добавьте его внутрь БД и в таблицу столбцов внутри ретранслятора.

Спасибо за помощь!!!

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

Public Sub INSERT_EXP_DATE_TABLE()



        Try
            cmd.Connection = cn
            cmd.CommandType = CommandType.StoredProcedure
            MyParm = cmd.Parameters.Add("@CD_CUSTOTMER", SqlDbType.Int)
            MyParm.Value = CInt(txt_CD_CUSTOMER.Text)
            MyParm = cmd.Parameters.Add("@COMPANY_NAME", SqlDbType.NVarChar)
            MyParm.Value = lbl_COMPANY_NAME.Text
            MyParm = cmd.Parameters.Add("@EXP_DATE", SqlDbType.Date)
            MyParm.Value = txt_EXP_DATE.Text
            cmd.CommandText = "LST_INSERT_TABLE_01"
            cmd.Connection.Open()
            cmd.ExecuteNonQuery()
            MsgBox("Record registered!", vbInformation)
        Catch ex As Exception
            MsgBox(ex.Message)

        Finally
            cn.Close()
        End Try

    End Sub

CHill60

В чем проблема с вашим кодом?

DARK__FOXX

У меня есть проблема с разбором значения даты, и я не знаю, правильна ли эта процедура

Afzaal Ahmad Zeeshan

Терпит ли он неудачу, и если да, то какую ошибку он дает?

Кроме того, вы не показали код хранимой процедуры, так что это может быть немного трудно отладить.

DARK__FOXX

@CD_CUSTOMER инт,
@COMPANY_NAME nvarchar(50),
@EXP_DATE дата,
@DTINIT DATETIME
АС

Если существует(выберите "True" из таблицы, где CODE_CUSTOMER = @CODE_CUSTOMER)
НАЧАТЬ
ВЫБЕРИТЕ ПУНКТ "ПОЛЕ СУЩЕСТВУЕТ".
КОНЕЦ
ЕЩЕ
НАЧАТЬ
Выберите пункт "Добавить запись".
ВСТАВИТЬ В ТАБЛИЦУ
(
CD_CUSTOMER,
НАЗВАНИЕ КОМПАНИИ,
EXP_DATE,
ДТИНИТ
)

ЦЕННОСТИ
(

@CD_CUSTOMER,
@НАЗВАНИЕ КОМПАНИИ,
@EXP_DATE,
@DTINIT
)
КОНЕЦ

2 Ответов

Рейтинг:
1

Richard MacCutchan

Посмотрите на свой код, вы передаете недопустимые данные:

MyParm = cmd.Parameters.Add("@CD_CUSTOTMER", SqlDbType.Int)
MyParm.Value = CInt(txt_CD_CUSTOMER.Text)            // Text is not Int
MyParm = cmd.Parameters.Add("@COMPANY_NAME", SqlDbType.NVarChar)
MyParm.Value = lbl_COMPANY_NAME.Text
MyParm = cmd.Parameters.Add("@EXP_DATE", SqlDbType.Date)
MyParm.Value = txt_EXP_DATE.Text                     // Text is not Date

Вы заявляете: @CD_CUSTOTMER (вы уверены, что это правильное написание?) SqlDbType.Int а затем установите его значение в виде текстовой строки. И вы делаете то же самое с @EXP_DATE. Вы должны преобразовать их (через TryParse) сначала к правильным типам, чтобы вы передавали правильные типы значений.


DARK__FOXX

Я лучше объясню, что эти значения автоматически вставляются в форму, которую я создал.
И ID_CUSTOMER, и название компании-это значения из таблицы, которую я объединил с новой таблицей, где находится столбец EXP_DATE.
Эти значения отображаются внутри ретранслятора.
Пользователь должен ввести только поле истечения срока действия, если это поле уже есть, не вводите самое большее, измените дату, иначе введите дату истечения срока действия.

Richard MacCutchan

Ну, это не меняет того факта, что ваш код неверен.

DARK__FOXX

Извините,я хотел понять, как попытаться решить эту проблему.
Я не очень хорошо разбираюсь в vb и asp.net

Richard MacCutchan

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

DARK__FOXX

MyParm = cmd.Parameters.Add("@CD_CUSTOMER", SqlDbType.Int)
MyParm.Value = Int32.TryParse(txt_CD_CUSTOMER.Text, не используется)
MyParm = cmd.Parameters.Add("@COMPANY_NAME", SqlDbType.NVarChar)
MyParm.Value = lbl_COMPANY_NAME.Text.Метод toString
MyParm = cmd.Parameters.Add("@EXP_DATE", SqlDbType.Date)
MyParm.Значение = Дата И Время.ParseExact(txt_EXP_DATE.Text, "dd/MM/yyyy", CultureInfo.Языка и региона существует)

Пробовал это решение, но не работает

Richard MacCutchan

Вместо того чтобы гадать, как использовать эти методы, пожалуйста, изучите документацию: Типа int32.Метод TryParse (Система) | Microsoft Docs[^].

Рейтинг:
1

CHill60

В ответ на комментарии OPs к решению 1 ..

MyParm = cmd.Parameters.Add("@CD_CUSTOMER", SqlDbType.Int)
MyParm.Value = Int32.TryParse(txt_CD_CUSTOMER.Text, unused)
MyParm = cmd.Parameters.Add("@COMPANY_NAME", SqlDbType.NVarChar)
MyParm.Value = lbl_COMPANY_NAME.Text.ToString
MyParm = cmd.Parameters.Add("@EXP_DATE", SqlDbType.Date)
MyParm.Value = DateTime.ParseExact(txt_EXP_DATE.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture)
Цитата:
пробовал это решение, но не работает
Я не удивлен, что это не работает - понимаете
MyParm = cmd.Parameters.Add("@CD_CUSTOMER", SqlDbType.Int)
MyParm.Value = Int32.TryParse(txt_CD_CUSTOMER.Text, unused)
Int.TryParse() возвращает логическое значение, а не целое число. Поэтому вы не можете просто присвоить это своему параметру. Посмотрите на документацию Типа int32.Метод TryParse (Система) | Microsoft Docs[^]. Ключ находится в вашей переменной unused - вы не использовали возвращаемое значение но ты должен был это сделатьЭтот фрагмент кода должен выглядеть более похожим (обратите внимание, что он не тестировался)
MyParm = cmd.Parameters.Add("@CD_CUSTOMER", SqlDbType.Int)
If Int32.TryParse(txt_CD_CUSTOMER.Text, unused) Then
    MyParm.Value = unused
Else
    'Let the user know they need to re-enter the data
End If
Вы сделали то же самое с txt_EXP_DATE, но у вас вообще нет значения out для этого - посмотрите документацию значение datetime.Метод TryParseExact (Система) | Microsoft Docs[^] или взгляните на примеры в https://www.dotnetperls.com/datetime-tryparse[^]


DARK__FOXX

Почему моя неиспользуемая переменная всегда возвращает 0, а не значение текстового поля?

CHill60

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

DARK__FOXX

Но этот код находится не в посте внутри load_page а в классе который он будет вызывать внутри события click

CHill60

Вам нужно понять поток управления, когда браузер возвращается на сервер для OnClick - посмотрите на статью Nams Обновить страницу выпуска в ASP.Net[^] что может помочь.
Веб - кодирование не похоже на VB-формы-вам нужно разобраться в том, что происходит на клиентском конце, когда страница визуализируется в браузере, и что происходит на серверном конце