1

SqlBuldCopyクラスを使用して、型指定されたデータセットからMSSQLデータベースにデータを挿入します。

foreach (DataTable dt in ds.Tables)
{
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) 
    {
        bulkCopy.DestinationTableName = "dbo." + dt.TableName + "_neu";

        try
        {
            bulkCopy.WriteToServer(dt);
        }
        catch (Exception ex)
        {
            throw new FaultException("\n" + dt.TableName + ": " + ex.Message);
        }
    }
}

それは素晴らしい働きをします。しかし、データベースにDataTime.MinValueを挿入すると、次のエラーが発生します:SqlDateTimeオーバーフロー。1/1/175312:00:00AMから12/31/999911:59:59PMの間にある必要があります。foreachで次のように言う方法はありますか:データセットのDateTimeフィールド値がDateTime.MinValueの場合、データセットのDateTimeフィールドをデータベースに挿入しないでください。

よろしくお願いします

4

3 に答える 3

1

データテーブルにDateTime.MinValueがないことを確認する必要があると思います-そのテーブルの母集団を制御しますか?

その場合、DateTime.MinValueをDateTimeフィールドに格納する代わりに、代わりにSqlDateTime.MinValueを使用します。または、NULLをDBに格納する場合は、代わりにDBNullをデータテーブルに格納します。

于 2009-12-15T09:23:22.670 に答える
1
public void ChangeDateTimeColumn(DataTable newDataTable)
{
    for (int i = 0; i < newDataTable.Rows.Count; i++)
    {
        for (int j = 0; j < newDataTable.Columns.Count; j++)
        {
            DataColumn dc = newDataTable.Columns[j];
            if (dc.DataType == typeof(DateTime))
            {
                string name = dc.ColumnName;
                DataRow row = newDataTable.Rows[i];
                if (row[name] != null && row[name].ToString().Trim() != "")
                {
                    DateTime value = (DateTime)row[name];
                    if (value < (DateTime)SqlDateTime.MinValue)
                    {
                        row[name] = (DateTime)SqlDateTime.MinValue;
                    }
                    else if ((DateTime)SqlDateTime.MaxValue < value)
                    {
                        row[name] = (DateTime)SqlDateTime.MaxValue;
                    }
                }
            }
        }
    }
} 
于 2015-07-14T04:59:24.707 に答える