1

この件に関してたくさんの質問を見つけ、すべてを試しましたが、まだ成功しませんでした。

SQLServerデータベースに日付を渡す必要があります。私のコードは次のとおりです。

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

私が試したこと:

上記のようにリンク

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

このリンク

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はdateと互換性がありません

私が受け取っ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、データベースに設定されています。そのデフォルト値は、日付と互換性がないと言う値です。これがこの問題の原因です。Ashok kumarが述べたように、どのようにして自分の価値を渡すことができるか

4

4 に答える 4

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

さらにサポートが必要な場合はお知らせください。

于 2013-02-25T05:46:14.637 に答える
1

データベーステーブル列のデータ型はDate、試してみることができますDateTimeか、またはdatetime2です。

また、Date変数を引用符で囲まないでください。

com.Parameters.Add(database.CreateParameter("@Admitdate",PatientRegistration.AdmitDate))
于 2013-02-25T05:12:18.367 に答える
1

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

于 2013-02-25T05:55:53.960 に答える
0
cmd.Parameters.AddWithValue("@DATE", DateTime.Now);
于 2013-11-26T15:03:47.343 に答える