2013-02-25 46 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"))); 

this link

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

然后我试着用提到

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}

我尝试过这些所有方法,但无法拯救我吨。请帮我弄清楚这里的问题。

谢谢...

编辑:

我的数据库模式:

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),但它似乎没有与我的问题

答案: 经过多次调查,我发现这个问题是由于我在数据库中的错误而发生的。

我没有将值传递给ReleaseDate字段,它在数据库中设置为default value。该默认值是与日期不符的那个。所以这是造成这个问题的原因。 我怎么任何我能够通过阿肖克库马尔

+1

发布表架构 – 2013-02-25 05:09:54

+0

列的数据类型是什么? – 2013-02-25 05:10:17

+0

@ SimonWhitehead-我试着AdmitDate作为日期和日期时间这两种类型。但它给同异常 – DevT 2013-02-25 05:13:01

回答

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

确定..感谢名单...我会检查并让你知道.... – DevT 2013-02-25 05:47:02

+0

即使它仍然不兼容给我同样的错误。我试图在我的自定义数据库类代码中引入事务锁。你认为这可能是导致这个问题的原因吗? pdated我的问题与我的数据库类编码 – DevT 2013-02-25 05:59:54

+0

我从你的代码和消息了解到,你面临数据类型不匹配的问题。 (对吗?)据我所知,我不会认为在定制的数据库类上引入事务锁会导致这个问题,但我不确定。是否可以通过删除自定义数据库上的交易锁再次尝试进行检查? – 2013-02-25 06:07:10

1

数据库表列的数据类型为Date提到通过我的价值,你可以尝试DateTimedatetime2

并且不要将Date变量报价:

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

我以前用过DateTime,但也不允许保存。所以这就是为什么我changged日期 - [AdmitDate] [日期] NOT NULL, – DevT 2013-02-25 05:14:28

+0

确定,你可以尝试我的第二个提示? – 2013-02-25 05:16:11

+0

我在这里发现了同样的错误:http://stackoverflow.com/a/7176687/495455,我无法确定,但我却默默地确信答案是解决方案。 – 2013-02-25 05:17:05

1

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

+0

原因试过没有工作...我试图引进事务锁定在我的自定义数据库类代码中,你认为这可能是导致这个问题的原因吗?用我的数据库类编码更新我的问题 – DevT 2013-02-25 06:00:53

0
cmd.Parameters.AddWithValue("@DATE", DateTime.Now);