2013-02-25 2 views
1

이 문제와 관련된 많은 질문을 발견했지만 모든 것을 시도했지만 아직 성공하지 못했습니다.데이터베이스에 날짜를 삽입하십시오. C#

SQL Server 데이터베이스에 날짜를 전달해야합니다.

public bool CreatePatient() 
{ 
    IDbConnection connection = database.CreateOpenConnection(); 
    IDbTransaction transaction = database.BeginTransaction(connection); 

    try 
    { 
     GenerateRegNo(); 

     SQL_STATEMENT = "INSERT INTO TblPatientRegistration(RegistrationNo, HospitalID, NIC, AdmitDate, BHTNo, WardNo) 
         VALUES(@RegNo, @HospiatlNo, @NIC, @Admitdate, @BHTNo, @WardNo)"; 

     IDbCommand com = database.CreateCommandTransaction(SQL_STATEMENT, connection, transaction); 

     com.Parameters.Add(database.CreateParameter("@RegNo", PatientRegistration.RegistrationNo)); 
     com.Parameters.Add(database.CreateParameter("@HospiatlNo", PatientRegistration.HospitalID)); 
     com.Parameters.Add(database.CreateParameter("@NIC", PatientRegistration.NIC)); 

     com.Parameters.Add(database.CreateParameter("@Admitdate", PatientRegistration.AdmitDate)); 
     com.Parameters.Add(database.CreateParameter("@BHTNo", PatientRegistration.BHTNo)); 
     com.Parameters.Add(database.CreateParameter("@WardNo", PatientRegistration.WardNo)); 

     if (com.ExecuteNonQuery() > 0) 
     { 
      string updStatement = "Update TblControl set RegNo=RegNo+1"; 
      IDbCommand com2 = database.CreateCommandTransaction(updStatement, connection, transaction); 
      com2.ExecuteNonQuery(); 
      transaction.Commit(); 
     return true; 
     } 
     else 
     { 
      transaction.Rollback(); 
      return false; 
     } 
    } 
    catch (Exception) 
    { 
     transaction.Rollback(); 
     return false; 
    } 
} 

내가 시도 무엇 :

Link

com.Parameters.Add(database.CreateParameter("@Admitdate", PatientRegistration.AdmitDate.ToString("dd/MM/yyyy"))); 

com.Parameters.Add(database.CreateParameter("@Admitdate", "'"+PatientRegistration.AdmitDate+"'")); 

this link 그때 01,230,570,467,937,731,516과 노력 위에서 언급 한 바와 같이 다음과 같이 내 코드입니다

피연산자 유형 충돌 : 73,210

String UrDate = PatientRegistration.AdmitDate.ToString("dd/MM/yyyy"); 
System.Globalization.DateTimeFormatInfo dateInfo = new System.Globalization.DateTimeFormatInfo(); 
dateInfo.ShortDatePattern = "dd/MM/yyyy"; 
DateTime validDate = Convert.ToDateTime(UrDate, dateInfo); 

com.Parameters.Add(database.CreateParameter("@Admitdate", validDate)); 

이러한 방법이 예외 던져 INT는 날짜와 호환되지를

내가로부터 PatientRegistration.AdmitDate을받은 값은 다음과 같습니다 {2/25/2013 12:00:00 AM}

I 이 모든 방법으로 시도했지만 구할 수 없었습니다. 티. 여기에서 문제를 찾아 내도록 도와주세요.

감사합니다 ...

편집 :

내 데이터베이스 스키마 :이 질문은 이미 여기에 (가까운 투표) 답변이있을 수 있습니다

CREATE TABLE [dbo].[TblPatientRegistration](
    [RegistrationNo] [char](10) NOT NULL, 
    [HospitalID] [char](10) NOT NULL, 
    [NIC] [char](10) NOT NULL, 
    [AdmitDate] [date] NOT NULL, 
    [BHTNo] [varchar](10) NOT NULL, 
    [WardNo] [varchar](10) NOT NULL, 
    [ReleaseDate] [date] NOT NULL, 
CONSTRAINT [PK_TblPatientRegistration_1] PRIMARY KEY CLUSTERED 
(
    [RegistrationNo] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

: -> 전 거기에 제안 된 답변을 시도 (옵션 2 참조),하지만 내 문제와 함께 작동하지 않는 것 같습니다

Answer : 몇 가지 조사 후 나는이 문제가 데이터베이스에서 실수로 인해 발생하는 것을 발견했습니다.

나는 ReleaseDate 필드에 값을 전달하지 않았으며 데이터베이스에 default value으로 설정했습니다. 그 기본값은 날짜와 호환되지 않는다고 말합니다. 그래서 그것이이 문제의 원인입니다. 나는, 아 쇼크 쿠마르

+1

테이블 스키마 –

+0

게시자의 열의 데이터 형식은 무엇입니까? –

+0

@ SimonWhitehead- AdmitDate를 Date와 DateTime 두 가지 유형으로 시도했습니다. 그러나 동일한 예외가 발생합니다. – DevT

답변

2

나는 @Admitdate 라인 만의 코드를 수정했습니다 :

그리고 따옴표로 날짜 변수를 묶으니까.

public bool CreatePatient() 
{ 
    IDbConnection connection = database.CreateOpenConnection(); 
    IDbTransaction transaction = database.BeginTransaction(connection); 

    try 
    { 
    GenerateRegNo(); 

    SQL_STATEMENT = "INSERT INTO TblPatientRegistration(RegistrationNo, HospitalID, NIC, AdmitDate, BHTNo, WardNo) 
        VALUES(@RegNo, @HospiatlNo, @NIC, @Admitdate, @BHTNo, @WardNo)"; 

    IDbCommand com = database.CreateCommandTransaction(SQL_STATEMENT, connection, transaction); 

    com.Parameters.Add(database.CreateParameter("@RegNo", PatientRegistration.RegistrationNo)); 
    com.Parameters.Add(database.CreateParameter("@HospiatlNo", PatientRegistration.HospitalID)); 
    com.Parameters.Add(database.CreateParameter("@NIC", PatientRegistration.NIC)); 

     String admitDate = txtAdmitDate.Text; 
     DateTime parsedAdmitDate; 
     if (DateTime.TryParseExact(admitDate, "d/M/y", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedAdmitDate)) 
      PatientRegistration.AdmitDate = parsedAdmitDate; 

    //com.Parameters.Add(database.CreateParameter("@Admitdate", PatientRegistration.AdmitDate)); 
    com.Parameters.Add(database.CreateParameter("@BHTNo", PatientRegistration.BHTNo)); 
    com.Parameters.Add(database.CreateParameter("@WardNo", PatientRegistration.WardNo)); 

    if (com.ExecuteNonQuery() > 0) 
    { 
     string updStatement = "Update TblControl set RegNo=RegNo+1"; 
     IDbCommand com2 = database.CreateCommandTransaction(updStatement, connection, transaction); 
     com2.ExecuteNonQuery(); 
     transaction.Commit(); 
    return true; 
    } 
    else 
    { 
     transaction.Rollback(); 
     return false; 
    } 
} 
catch (Exception) 
{ 
    transaction.Rollback(); 
    return false; 
} 
} 

추가 도움이 필요하면 알려주십시오.

+0

ok .. 고맙습니다 ... 저는 이것을 확인하고 알려 드리겠습니다 .... – DevT

+0

내가 똑같은 오류를 준다. 내 커스텀 데이터베이스 클래스 코드에서 트랜잭션 잠금을 도입하려고 시도했다. 이 문제의 원인이 될 수 있다고 생각합니까? 내 데이터베이스 클래스 코드를 사용하여 내 질문을 pdf – DevT

+0

데이터 형식 불일치 문제가 직면하고 있음을 귀하의 코드와 메시지에서 이해했습니다. (필자는 맞습니까?) 필자가 알고있는 한, 커스터마이징 된 데이터베이스 클래스에 트랜잭션 잠금을 도입하면이 문제가 발생한다고 생각하지 않지만 확실하지는 않습니다. 사용자 정의 데이터베이스의 트랜잭션 잠금을 제거하여 확인하고 다시 시도 할 수 있습니까? –

1

데이터베이스 테이블 컬럼의 데이터 유형이 Date입니다 언급 나의 가치를 전달할 수있어 당신이 DateTime 또는 datetime2을 시도 할 수있는 방법에 대해 설명합니다.

com.Parameters.Add(database.CreateParameter("@Admitdate",PatientRegistration.AdmitDate)) 
+0

이전에 DateTime을 시도했지만 저장하지 못했습니다. 그래서 내가 왜 날짜를 변경했는지 - [AdmitDate] [날짜] NULL이 아님, – DevT

+0

제 2의 팁을 시도해 볼 수 있습니까? –

+0

나는 같은 오류를 발견 : http://stackoverflow.com/a/7176687/495455, 나는 확신 할 수 없지만 조용히 대답은 해결책이라고 확신한다. –

1

command.Parameters.AddWithValue("@yourDateTimeVariable", dateTimeObject); ????

+0

시도하지 못했습니다 ... 소개하려고했습니다. 내 사용자 정의 데이터베이스 클래스 코드에서 트랜잭션 잠금.이 문제의 원인이 될 수 있다고 생각합니까? 내 데이터베이스 클래스 코딩 내 질문 업데이트 – DevT

0
cmd.Parameters.AddWithValue("@DATE", DateTime.Now); 
관련 문제