簡體   English   中英

如何使用掩碼從 JFormatedTextField 插入日期

[英]How to Insert date from JFormatedTextField with mask

我正在開發一個應用程序,有一些帶有掩碼格式的 JFormatedTextFields(##/##/#### 為 dd/MM/YYYY)。 我正在嘗試將這些日期插入數據庫,但它顯示錯誤“將數據類型 nvarchar 轉換為日期時出錯” 將數據類型 nvarchar 轉換為日期時出錯

但我在我的 sql 過程中找不到任何問題,因為如果我使用 sql 查詢分析器運行該過程,它正在工作,但如果我嘗試從應用程序執行它會顯示錯誤

這是我的所有代碼

sql程序

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Proc_set_ExamDeclaration]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[Proc_set_ExamDeclaration]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE  Procedure [dbo].[Proc_set_ExamDeclaration]
                     (
                    @SchoolCode nvarchar (10),
                    @ClassCode nvarchar (4),
                    @GroupName nvarchar(50),
                    @ExamCode nvarchar (4),
                    @RegistationFess numeric(38,2),
                    @RegistatinStartDate date,
                    @RegistatinEndDate date,
                    @ExamStartDate date,
                    @ExamStatus nvarchar(10)
                    )
as

BEGIN
-- Insert statements for procedure here
Declare @RFirst as Date, @REnd as Date, @EStart as Date
set @RFirst = CONVERT(varchar, @RegistatinStartDate, 103)
set @REnd = CONVERT(varchar, @RegistatinEndDate, 103)
set @EStart = CONVERT(varchar, @ExamStartDate, 103)
IF NOT EXISTS (SELECT * FROM [dbo].[ExamDeclaration] where ClassCode = @ClassCode AND GroupName = @GroupName AND ExamCode = @ExamCode AND ExamStatus = 'Active')
BEGIN
INSERT INTO ExamDeclaration (SchoolCode, ClassCode,GroupName,ExamCode,RegistationFess,RegistatinStartDate,RegistatinEndDate,ExamStartDate,ExamStatus)
VALUES (@SchoolCode, @ClassCode,@GroupName,@ExamCode,@RegistationFess,@RFirst,@REnd,@EStart,@ExamStatus)
END
ELSE 
Update ExamDeclaration 
set RegistationFess = @RegistationFess,
RegistatinStartDate = @RFirst,
RegistatinEndDate = @REnd,
ExamStartDate = @EStart,
ExamStatus = @ExamStatus
Where ClassCode = @ClassCode AND GroupName=@GroupName AND ExamCode = @ExamCode
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

這是java代碼

    String School_Code = txt_SchoolCode.getText();
    String ClassCode = txt_ClassCode.getText();
    String groupName = com_groupname.getSelectedItem().toString();
    String examCode = txt_ExamCode.getText();
    String fees = txt_fees.getText();        
    String RStart = txt_RStart.getText();//((JTextField) txt_RStart.getDateEditor().getUiComponent()).getText();
    String REnd = txt_REnd.getText();//((JTextField) txt_REnd.getDateEditor().getUiComponent()).getText();
    String EStart = txt_ExamStart.getText();//((JTextField) txt_ExamStart.getDateEditor().getUiComponent()).getText();        
    String Estatus = com_eStatus.getSelectedItem().toString();
    if(ClassCode.isEmpty() && examCode.isEmpty() && fees.isEmpty() /*&& RStart.isEmpty() && REnd.isEmpty() && EStart.isEmpty()*/){JOptionPane.showMessageDialog(null, "All Fields are Required !!");}
    else{
        try{
            String sqlExamD = "Exec Proc_set_ExamDeclaration ?,?,?,?,?,?,?,?,?";
            pst=conn.prepareStatement(sqlExamD);
            pst.setString(1, School_Code);
            pst.setString(2, ClassCode);
            pst.setString(3, groupName);
            pst.setString(4, examCode);
            pst.setString(5, fees);
            pst.setString(6, RStart);
            pst.setString(7, REnd);
            pst.setString(8, EStart);
            pst.setString(9, Estatus);

            pst.execute();
            JOptionPane.showMessageDialog(null, "Saved Successfuly");
            btn_new.doClick();

        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }
    }

任何想法我的代碼中的問題在哪里?

我正在使用 java netbeans 和 sql server 2008

謝謝你。

在我看來,您將 Java 中的日期變量分配為字符串,但實際上將它們定義為日期:

String RStart = txt_RStart.getText();
...
@RegistatinStartDate date

然后您嘗試將日期轉換為 varchar 但將其分配回日期?

Declare @RFirst as Date
...
set @RFirst = CONVERT(varchar, @RegistatinStartDate, 103)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM