2013-02-25 5 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+"'")); 

тогда я попытался с this link

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)); 

Эти методы бросают это исключение:

Операнд тип столкновения: ИНТ несовместима с датой

Значение я получил PatientRegistration.AdmitDate от это: {2/25/2013 12:00:00 AM}

I пробовал с этими всеми методами, но не смог спасти i т. пожалуйста, помогите мне разобраться с проблемой здесь.

Спасибо ...

EDIT:

Моя схема базы данных:

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

Опубликовать схему таблицы –

+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 .. thanx ... я проверю это и дам вам знать .... – DevT

+0

, хотя он все еще дает мне такую ​​же ошибку. Я попытался ввести транзакционную блокировку в свой код класса базы данных. как вы думаете, что может быть причиной этой проблемы? pdated мой вопрос с моим кодом класса базы данных – DevT

+0

Я понял из вашего кода и сообщения, что вы столкнулись с проблемой несоответствия типа данных. (Я прав?) Насколько мне известно, я не думаю, что введение блокировки транзакций в настраиваемый класс базы данных вызывает эту проблему, но я не уверен. Можно ли проверить, удалив блокировку trasaction в своей базе данных настройки и повторите попытку? –

1

Тип данных вашей базы данных столбца таблицы является Date, вы можете попробовать DateTime или datetime2.

И не заключите переменную Date в кавычки:

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

Я пробовал с DateTime ранее, и это также не позволило мне сохранить. так вот почему я сменился на сегодняшний день - [AdmitDate] [дата] NOT NULL, – DevT

+0

Хорошо, вы можете попробовать второй отзыв? –

+0

Я нашел ту же ошибку здесь: http://stackoverflow.com/a/7176687/495455, я не могу быть уверенным, но я уверен, что ответ - это решение. –

1

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

+0

не работал ... я попытался представить блокировка транзакций в моем настраиваемом коде класса базы данных. Как вы думаете, это может быть причиной этой проблемы? обновил мой вопрос с помощью кода базы данных – DevT