简体   繁体   English

如何使用掩码从 JFormatedTextField 插入日期

[英]How to Insert date from JFormatedTextField with mask

I am working on a app there are some JFormatedTextFields with mask formatted (##/##/#### as dd/MM/YYYY).我正在开发一个应用程序,有一些带有掩码格式的 JFormatedTextFields(##/##/#### 为 dd/MM/YYYY)。 I am trying to insert these date into Database but it is showing an error "Error Converting data type nvarchar to Date" Error Converting data type nvarchar to Date我正在尝试将这些日期插入数据库,但它显示错误“将数据类型 nvarchar 转换为日期时出错” 将数据类型 nvarchar 转换为日期时出错

but I could not find any problem in my sql procedure because if I run that procedure using sql query analyzer it is working but if I try to execute from app it is showing error但我在我的 sql 过程中找不到任何问题,因为如果我使用 sql 查询分析器运行该过程,它正在工作,但如果我尝试从应用程序执行它会显示错误

here is my all codes这是我的所有代码

sql procedure 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

and here is the java codes这是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);
        }
    }

any Idea where is the problem in my codes?任何想法我的代码中的问题在哪里?

I am using java netbeans and sql server 2008我正在使用 java netbeans 和 sql server 2008

Thank you.谢谢你。

It looks to me that you have you assign your date variables in Java as strings, but you have them actually defined as dates:在我看来,您将 Java 中的日期变量分配为字符串,但实际上将它们定义为日期:

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

And then you try to convert from date to varchar but assign it back to a 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