2015-11-02 19 views
-1

我正在應用程序中有一些JFormatedTextFields,其蒙版格式爲(##/##/#### as dd/MM/YYYY)。我試圖插入這些日期到數據庫,但它顯示錯誤「錯誤轉換數據類型nvarchar到日期」 Error Converting data type nvarchar to Date如何從JFormatedTextField插入日期和掩碼

但我找不到任何問題,因爲如果我運行該過程使用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 [email protected] 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

謝謝。

回答

0

它看起來對我說,你有你的Java分配的日期變量爲字符串,但你有他們實際上被定義爲日期:

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

然後嘗試從日期轉換爲varchar,但它分配回到約會?

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