c# - 判定 - vb.net null 代入




テーブルはnullable DateTimeですが、DataSetは例外をスローしますか? (6)

私は、データセットデザイナーを使用してクエリからデータテーブルを作成しようとしています。 私はちょうどいいこれを得た。 使用されたクエリは、データベースからNULL可能なdatetime列を返します。 しかし、このコードに近づくと:

DataSet1.DataTable1DataTable table = adapter.GetData();

これによりStrongTypingExceptionがスローされます。

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public System.DateTime event_start_date {
    get {
        try {
            return ((global::System.DateTime)(this[this.tableDataTable1.event_start_dateColumn]));
        }
        catch (global::System.InvalidCastException e) {
            throw new global::System.Data.StrongTypingException("The value for column \'event_start_date\' in table \'DataTable1\' is DBNull.", e);
        }
    }
    set {
        this[this.tableDataTable1.event_start_dateColumn] = value;
    }
}

デザイナを使用してこの列をNullableにする方法を教えてください。


DataTableとStrongly Typed DataTableでは違います。Useこのようにします。

DataSet1.DataTable1DataTable table = new DataSet1.DataTable1DataTable();
table.Merge(adapter.GetData().CopyToDataTable());

System.DateTimeオブジェクトはnull可能ではありません。 DateTimeをnullにすると、それはDateTimeになりますか? (DateTimeの後に?を付ける)

DateTime? nullableDateTime = null;

ありがとうこれは私の同様の問題を解決しました:ここにコードです。 この質問の場合

Isevent_start_date()

フィールドがnullかどうかを返します。

私の場合:私は同様の問題があり、私は以下の解決策を使用しました

            //Table's Name is Efforts,
            //Column's name is Target
            //So the dataset would automatically generate a property called IsTargetNull() which can be used to check nullables
            //Create an Adaptor
            EffortsTableAdapter ad = new EffortsTableAdapter();
            ProjectDashBoard.Db.EffortsDataTable efforts = ad.GetData();
            DataColumn targetColumn = new DataColumn();
            targetColumn = efforts.TargetColumn;

            List<DateTime?> targetTime = new List<DateTime?>();
            foreach (var item in efforts)
            {

                //----------------------------------------------------
                //This is the line that we are discussing about : 
                DateTime? myDateTime = item.IsTargetNull() ? null : (DateTime?)item.Target;
                //----------------------------------------------------

                targetTime.Add(myDateTime);

            }

これをLINQで動作させるには、dataset.xsdのTablesプロパティに移動する必要があります。 最初に見て、列が実際にnullableに設定されていることを確認します。 次に列の特定のプロパティ "NullValue"を調べる必要があります。 Null Valueは、少なくともVS 2012では "Exception"にデフォルト設定されています.LINQ Where句に "IsNot Nothing"を実行できるように、VBではNothingに設定します。


私はDateTime列に値NULLを挿入するためにこれを行いましたが、

データベースにnullable DateTime列があると仮定して、私はresponseというオブジェクトのデータベースからいくつかのデータを取得し、 RenewDateと呼ばれるDataSet列にnullable DateTime値を挿入します。

// create anew row of the same type of your table row
var rw = ds.StudentActionPrintDT.NewStudentActionPrintDTRow();

// check for null value
if(!response.RenewDate.HasValue)
{
  // if null, then the let DataSet to set it null by it's own way 
  rw.SetRenewDateNull();
}
else
{
  // if not null set value to the datetime value
  rw.RenewDate = response.RenewDate.Value;
}
// add the created row to the dateset [DataSetName].[ColumnName].Add[ColumnName]Row([The Created Row]);
ds.StudentActionPrintDT.AddStudentActionPrintDTRow(rw);

私は、データシートに読み込まれているExcelシートのヌルセルを処理するために、以下のコードを使用しています。

if (!reader.IsDBNull(0))                                
{                                    
  row["DateOnCall"] = (DateTime)reader[0];
}




dataset