0

linq を使用して sqlserver に DateTime 値を挿入しようとしています。csharp 側の DateTime 値が null である可能性があります。sqlserver の対応するフィールドは、null 許容の日時フィールドです。以下は私のコードです:

using (var dataContext = GetDataContext())
{
    DateTime dateTime;
    var combinedWorkBasket = new CombinedWorkBasket()
    {

        FirstName = combinedWorkbasketData.FirstName,
        LastName = combinedWorkbasketData.LastName,
        Address1 = combinedWorkbasketData.Address1,
        RetirementDate = Convert.ToDateTime(combinedWorkbasketData.RetirementDate),

    };
    dataContext.CombinedWorkBaskets.InsertOnSubmit(combinedWorkBasket);
    dataContext.SubmitChanges();
}

結合されたWorkbasketData.RetirementDate がたまたま null (有効な日付または null の可能性がある文字列値) である場合、sqlserver は日付が範囲内にある必要があるというエラーをスローします。combinedWorkbasketData.RetirementDate が null になると、Convert.ToDateTime(combinedWorkbasketData.RetirementDate) は無効なデータ値に変換されます。私は次のことを試しましたが、それでも同じ問題です。

RetirementDate = DateTime.TryParse(combinedWorkbasketData.RetirementDate, out temp) ? Convert.ToDateTime(combinedWorkbasketData.RetirementDate) : Convert.ToDateTime(null)

私は単純に次のことを達成したいと考えています。

ありがとう

4

3 に答える 3

1

null許容データ型を使用することもできますが、これは、データベースでRetirementDate列にnull値が許可されている場合にのみ役立ちます。さらに、CombinedWorkBasketクラスのRetirementDateフィールドもnull許容にする必要があります。

using (var dataContext = GetDataContext())
{
    DateTime? dateTime;
    var combinedWorkBasket = new CombinedWorkBasket()
    {

        FirstName = combinedWorkbasketData.FirstName,
        LastName = combinedWorkbasketData.LastName,
        Address1 = combinedWorkbasketData.Address1,
        RetirementDate = combinedWorkbasketData.RetirementDate != null ?
            Convert.ToDateTime(combinedWorkbasketData.RetirementDate) : null;

    };
    dataContext.CombinedWorkBaskets.InsertOnSubmit(combinedWorkBasket);
    dataContext.SubmitChanges();
}
于 2012-08-28T06:56:15.927 に答える
1

問題は、datetime が null 値を保持しないが、最小時間、つまりこのようなものを保持することです。「0001/1/1 12:00:00 AM」。日時を直接渡す代わりに、使用してみてください

DateTime.MinValue== Convert.ToDateTime(combinedWorkbasketData.RetirementDate)?Null:Convert.ToDateTime(combinedWorkbasketData.RetirementDate)

コードをテストしていないので、参考として使用してください。何らかの改良が必要な場合があります。

于 2012-08-28T06:58:45.607 に答える
0

Entity FrameworkがDBNullを挿入するには、RetirementDateがnull許容型である必要があると思います。

だからそれを

public class CombinedWorkBasket
{
    // other fields
    public DateTime? RetirementDate { get; set; }
}

次に、データベースで「Allow Null」として関連付けられた列を使用して、ロジックに従ってNullを割り当ててみてください。

うまくいけば、nullが挿入されます。

于 2012-08-28T06:57:46.010 に答える