' <fileinfo name="OrderDetailsCollection_Base.vb">
' <copyright>
' All rights reserved.
' </copyright>
' <remarks>
' Do not change this source code manually. Changes to this file may
' cause incorrect behavior and will be lost if the code is regenerated.
' </remarks>
' <generator rewritefile="True" infourl="http://www.SharpPower.com">RapTier</generator>
' </fileinfo>
Option Strict Off
Option Explicit On
Imports System
Imports System.Data
''' <summary>
''' The base class for <see cref="OrderDetailsCollection"/>. Provides methods
''' for common database table operations.
''' </summary>
''' <remarks>
''' Do not change this source code. Update the <see cref="OrderDetailsCollection"/>
''' class if you need to add or change some functionality.
''' </remarks>
Public MustInherit Class OrderDetailsCollection_Base
' Constants
Public Const OrderIDColumnName As String = "OrderID"
Public Const ProductIDColumnName As String = "ProductID"
Public Const UnitPriceColumnName As String = "UnitPrice"
Public Const QuantityColumnName As String = "Quantity"
Public Const DiscountColumnName As String = "Discount"
' Instance fields
Private _db As Northwind
''' <summary>
''' Initializes a new instance of the <see cref="OrderDetailsCollection_Base"/>
''' class with the specified <see cref="Northwind"/>.
''' </summary>
''' <param name="db">The <see cref="Northwind"/> object.</param>
Public Sub New(db As Northwind)
MyBase.New()
_db = db
End Sub
''' <summary>
''' Gets the database object that this table belongs to.
''' </summary>
''' <value>The <see cref="Northwind"/> object.</value>
Protected ReadOnly Property Database As Northwind
Get
Return _db
End Get
End Property
''' <summary>
''' Gets an array of all records from the <c>Order Details</c> table.
''' </summary>
''' <returns>An array of <see cref="OrderDetailsRow"/> objects.</returns>
Public Overridable Function GetAll() As OrderDetailsRow()
Return MapRecords(CreateGetAllCommand())
End Function
''' <summary>
''' Gets a <see cref="System.Data.DataTable"/> object that
''' includes all records from the <c>Order Details</c> table.
''' </summary>
''' <returns>A reference to the <see cref="System.Data.DataTable"/> object.</returns>
Public Overridable Function GetAllAsDataTable() As DataTable
Return MapRecordsToDataTable(CreateGetAllCommand())
End Function
''' <summary>
''' Creates and returns an <see cref="System.Data.IDbCommand"/> object that is used
''' to retrieve all records from the <c>Order Details</c> table.
''' </summary>
''' <returns>A reference to the <see cref="System.Data.IDbCommand"/> object.</returns>
Protected Overridable Function CreateGetAllCommand() As IDbCommand
Return _db.CreateCommand("dbo._OrderDetails_GetAll", True)
End Function
''' <summary>
''' Gets the first <see cref="OrderDetailsRow"/> objects that
''' match the search condition.
''' </summary>
''' <param name="whereSql">The SQL search condition. For example:
''' <c>"FirstName='Smith' AND Zip=75038"</c>.</param>
''' <returns>An instance of <see cref="OrderDetailsRow"/> or null reference
''' (Nothing in Visual Basic) if the object was not found.</returns>
Public Function GetRow(whereSql As String) As OrderDetailsRow
Dim totalRecordCount As Integer = -1
Dim rows As OrderDetailsRow() = GetAsArray(whereSql, Nothing, 0, 1, totalRecordCount)
If 0 = rows.Length Then
Return Nothing
End If
Return rows(0)
End Function
''' <summary>
''' Gets an array of <see cref="OrderDetailsRow"/> objects that
''' match the search condition, in the the specified sort order.
''' </summary>
''' <param name="whereSql">The SQL search condition. For example:
''' <c>"FirstName='Smith' AND Zip=75038"</c>.</param>
''' <param name="orderBySql">The column name(s) followed by "ASC" (ascending) or "DESC" (descending).
''' Columns are sorted in ascending order by default. For example: <c>"LastName ASC, FirstName ASC"</c>.</param>
''' <returns>An array of <see cref="OrderDetailsRow"/> objects.</returns>
Public Function GetAsArray(whereSql As String, orderBySql As String) As OrderDetailsRow()
Dim totalRecordCount As Integer = -1
Return GetAsArray(whereSql, orderBySql, 0, Integer.MaxValue, totalRecordCount)
End Function
''' <summary>
''' Gets an array of <see cref="OrderDetailsRow"/> objects that
''' match the search condition, in the the specified sort order.
''' </summary>
''' <param name="whereSql">The SQL search condition. For example:
''' <c>"FirstName='Smith' AND Zip=75038"</c>.</param>
''' <param name="orderBySql">The column name(s) followed by "ASC" (ascending) or "DESC" (descending).
''' Columns are sorted in ascending order by default. For example: <c>"LastName ASC, FirstName ASC"</c>.</param>
''' <param name="startIndex">The index of the first record to return.</param>
''' <param name="length">The number of records to return.</param>
''' <param name="totalRecordCount">A reference parameter that returns the total number
''' of records in the reader object if 0 was passed into the method; otherwise it returns -1.</param>
''' <returns>An array of <see cref="OrderDetailsRow"/> objects.</returns>
Public Overridable Function GetAsArray(whereSql As String, orderBySql As String, _
startIndex As Integer, length As Integer, _
ByRef totalRecordCount As Integer) As OrderDetailsRow()
Dim reader As IDataReader = _db.ExecuteReader(CreateGetCommand(whereSql, orderBySql))
Try
Return MapRecords(reader, startIndex, length, totalRecordCount)
Finally
reader.Dispose()
End Try
End Function
''' <summary>
''' Gets a <see cref="System.Data.DataTable"/> object filled with data that
''' match the search condition, in the the specified sort order.
''' </summary>
''' <param name="whereSql">The SQL search condition. For example: "FirstName='Smith' AND Zip=75038".</param>
''' <param name="orderBySql">The column name(s) followed by "ASC" (ascending) or "DESC" (descending).
''' Columns are sorted in ascending order by default. For example: "LastName ASC, FirstName ASC".</param>
''' <returns>A reference to the <see cref="System.Data.DataTable"/> object.</returns>
Public Function GetAsDataTable(whereSql As String, orderBySql As String) As DataTable
Dim totalRecordCount As Integer = -1
return GetAsDataTable(whereSql, orderBySql, 0, Integer.MaxValue, totalRecordCount)
End Function
''' <summary>
''' Gets a <see cref="System.Data.DataTable"/> object filled with data that
''' match the search condition, in the the specified sort order.
''' </summary>
''' <param name="whereSql">The SQL search condition. For example: "FirstName='Smith' AND Zip=75038".</param>
''' <param name="orderBySql">The column name(s) followed by "ASC" (ascending) or "DESC" (descending).
''' Columns are sorted in ascending order by default. For example: "LastName ASC, FirstName ASC".</param>
''' <param name="startIndex">The index of the first record to return.</param>
''' <param name="length">The number of records to return.</param>
''' <param name="totalRecordCount">A reference parameter that returns the total number
''' of records in the reader object if 0 was passed into the method; otherwise it returns -1.</param>
''' <returns>A reference to the <see cref="System.Data.DataTable"/> object.</returns>
Public Overridable Function GetAsDataTable(whereSql As String, orderBySql As String, _
startIndex As Integer, length As Integer, _
ByRef totalRecordCount As Integer) As DataTable
Dim reader As IDataReader = _db.ExecuteReader(CreateGetCommand(whereSql, orderBySql))
Try
Return MapRecordsToDataTable(reader, startIndex, length, totalRecordCount)
Finally
reader.Dispose()
End Try
End Function
''' <summary>
''' Creates an <see cref="System.Data.IDbCommand"/> object for the specified search criteria.
''' </summary>
''' <param name="whereSql">The SQL search condition. For example: "FirstName='Smith' AND Zip=75038".</param>
''' <param name="orderBySql">The column name(s) followed by "ASC" (ascending) or "DESC" (descending).
''' Columns are sorted in ascending order by default. For example: "LastName ASC, FirstName ASC".</param>
''' <returns>A reference to the <see cref="System.Data.IDbCommand"/> object.</returns>
Protected Overridable Function CreateGetCommand(whereSql As String, _
orderBySql As String) As IDbCommand
Dim sql As String = "SELECT * FROM [dbo].[Order Details]"
If Not(whereSql Is Nothing) AndAlso 0 < whereSql.Length Then
sql += " WHERE " + whereSql
End If
If Not(orderBySql Is Nothing) AndAlso 0 < orderBySql.Length Then
sql += " ORDER BY " + orderBySql
End If
Return _db.CreateCommand(sql)
End Function
''' <summary>
''' Gets <see cref="OrderDetailsRow"/> by the primary key.
''' </summary>
''' <param name="orderID">The <c>OrderID</c> column value.</param>
''' <param name="productID">The <c>ProductID</c> column value.</param>
''' <returns>An instance of <see cref="OrderDetailsRow"/> or null reference
''' (Nothing in Visual Basic) if the object was not found.</returns>
Public Overridable Function GetByPrimaryKey(orderID As Integer, productID As Integer) As OrderDetailsRow
Dim cmd As IDbCommand = _db.CreateCommand("dbo._OrderDetails_GetByPrimaryKey", True)
AddParameter(cmd, "OrderID", orderID)
AddParameter(cmd, "ProductID", productID)
Dim tempArray As OrderDetailsRow() = MapRecords(cmd)
If 0 = tempArray.Length Then
Return Nothing
End If
Return tempArray(0)
End Function
''' <summary>
''' Gets an array of <see cref="OrderDetailsRow"/> objects
''' by the <c>FK_Order_Details_Orders</c> foreign key.
''' </summary>
''' <param name="orderID">The <c>OrderID</c> column value.</param>
''' <returns>An array of <see cref="OrderDetailsRow"/> objects.</returns>
Public Overridable Function GetByOrderID(orderID As Integer) As OrderDetailsRow()
Return MapRecords(CreateGetByOrderIDCommand(orderID))
End Function
''' <summary>
''' Gets a <see cref="System.Data.DataTable"/> object
''' by the <c>FK_Order_Details_Orders</c> foreign key.
''' </summary>
''' <param name="orderID">The <c>OrderID</c> column value.</param>
''' <returns>A reference to the <see cref="System.Data.DataTable"/> object.</returns>
Public Overridable Function GetByOrderIDAsDataTable(orderID As Integer) As DataTable
Return MapRecordsToDataTable(CreateGetByOrderIDCommand(orderID))
End Function
''' <summary>
''' Creates an <see cref="System.Data.IDbCommand"/> object that can be used to
''' return records by the <c>FK_Order_Details_Orders</c> foreign key.
''' </summary>
''' <param name="orderID">The <c>OrderID</c> column value.</param>
''' <returns>A reference to the <see cref="System.Data.IDbCommand"/> object.</returns>
Protected Overridable Function CreateGetByOrderIDCommand( _
orderID As Integer) As IDbCommand
Dim cmd As IDbCommand = _db.CreateCommand("dbo._OrderDetails_GetBy_OrderID", True)
AddParameter(cmd, "OrderID", orderID)
Return cmd
End Function
''' <summary>
''' Gets an array of <see cref="OrderDetailsRow"/> objects
''' by the <c>FK_Order_Details_Products</c> foreign key.
''' </summary>
''' <param name="productID">The <c>ProductID</c> column value.</param>
''' <returns>An array of <see cref="OrderDetailsRow"/> objects.</returns>
Public Overridable Function GetByProductID(productID As Integer) As OrderDetailsRow()
Return MapRecords(CreateGetByProductIDCommand(productID))
End Function
''' <summary>
''' Gets a <see cref="System.Data.DataTable"/> object
''' by the <c>FK_Order_Details_Products</c> foreign key.
''' </summary>
''' <param name="productID">The <c>ProductID</c> column value.</param>
''' <returns>A reference to the <see cref="System.Data.DataTable"/> object.</returns>
Public Overridable Function GetByProductIDAsDataTable(productID As Integer) As DataTable
Return MapRecordsToDataTable(CreateGetByProductIDCommand(productID))
End Function
''' <summary>
''' Creates an <see cref="System.Data.IDbCommand"/> object that can be used to
''' return records by the <c>FK_Order_Details_Products</c> foreign key.
''' </summary>
''' <param name="productID">The <c>ProductID</c> column value.</param>
''' <returns>A reference to the <see cref="System.Data.IDbCommand"/> object.</returns>
Protected Overridable Function CreateGetByProductIDCommand( _
productID As Integer) As IDbCommand
Dim cmd As IDbCommand = _db.CreateCommand("dbo._OrderDetails_GetBy_ProductID", True)
AddParameter(cmd, "ProductID", productID)
Return cmd
End Function
''' <summary>
''' Adds a new record into the <c>Order Details</c> table.
''' </summary>
''' <param name="value">The <see cref="OrderDetailsRow"/> object to be inserted.</param>
Public Overridable Sub Insert(value As OrderDetailsRow)
Dim cmd As IDbCommand = _db.CreateCommand("dbo._OrderDetails_Insert", true)
AddParameter(cmd, "OrderID", value.OrderID)
AddParameter(cmd, "ProductID", value.ProductID)
AddParameter(cmd, "UnitPrice", value.UnitPrice)
AddParameter(cmd, "Quantity", value.Quantity)
AddParameter(cmd, "Discount", value.Discount)
cmd.ExecuteNonQuery()
End Sub
''' <summary>
''' Updates a record in the <c>Order Details</c> table.
''' </summary>
''' <param name="value">The <see cref="OrderDetailsRow"/>
''' object used to update the table record.</param>
''' <returns>true if the record was updated; otherwise, false.</returns>
Public Overridable Function Update(value As OrderDetailsRow) As Boolean
Dim cmd As IDbCommand = _db.CreateCommand("dbo._OrderDetails_Update", true)
AddParameter(cmd, "UnitPrice", value.UnitPrice)
AddParameter(cmd, "Quantity", value.Quantity)
AddParameter(cmd, "Discount", value.Discount)
AddParameter(cmd, "OrderID", value.OrderID)
AddParameter(cmd, "ProductID", value.ProductID)
Return 0 <> cmd.ExecuteNonQuery()
End Function
''' <summary>
''' Updates the <c>Order Details</c> table and calls the <c>AcceptChanges</c> method
''' on the changed DataRow objects.
''' </summary>
''' <param name="table">The <see cref="System.Data.DataTable"/> used to update the data source.</param>
Public Sub Update(table As DataTable)
Update(table, true)
End Sub
''' <summary>
''' Updates the <c>Order Details</c> table. Pass <c>false</c> as the <c>acceptChanges</c>
''' argument when your code calls this method in an ADO.NET transaction context. Note that in
''' this case, after you call the Update method you need call either <c>AcceptChanges</c>
''' or <c>RejectChanges</c> method on the DataTable object.
''' <code>
''' MyDb db = new MyDb();
''' try
''' {
''' db.BeginTransaction();
''' db.MyCollection.Update(myDataTable, false);
''' db.CommitTransaction();
''' myDataTable.AcceptChanges();
''' }
''' catch(Exception)
''' {
''' db.RollbackTransaction();
''' myDataTable.RejectChanges();
''' }
''' </code>
''' </summary>
''' <param name="table">The <see cref="System.Data.DataTable"/> used to update the data source.</param>
''' <param name="acceptChanges">Specifies whether this method calls the <c>AcceptChanges</c>
''' method on the changed DataRow objects.</param>
Public Overridable Sub Update(table As DataTable, acceptChanges As Boolean)
Dim rows As DataRowCollection = table.Rows
Dim i As Integer
For i = rows.Count - 1 To 0 Step -1
Dim row As DataRow = rows(i)
Select row.RowState
Case DataRowState.Added
Insert(MapRow(row))
If acceptChanges Then
row.AcceptChanges()
End If
Case DataRowState.Deleted
row.RejectChanges()
Try
DeleteByPrimaryKey(CType(row("OrderID"), Integer), CType(row("ProductID"), Integer))
Finally
row.Delete()
End Try
If acceptChanges Then
row.AcceptChanges()
End If
Case DataRowState.Modified
Update(MapRow(row))
If acceptChanges Then
row.AcceptChanges()
End If
End Select
Next
End Sub
''' <summary>
''' Deletes the specified object from the <c>Order Details</c> table.
''' </summary>
''' <param name="value">The <see cref="OrderDetailsRow"/> object to delete.</param>
''' <returns>true if the record was deleted; otherwise, false.</returns>
Public Function Delete(value As OrderDetailsRow) As Boolean
Return DeleteByPrimaryKey(value.OrderID, value.ProductID)
End Function
''' <summary>
''' Deletes a record from the <c>Order Details</c> table using
''' the specified primary key.
''' </summary>
''' <param name="orderID">The <c>OrderID</c> column value.</param>
''' <param name="productID">The <c>ProductID</c> column value.</param>
''' <returns>true if the record was deleted; otherwise, false.</returns>
Public Overridable Function DeleteByPrimaryKey(orderID As Integer, productID As Integer) As Boolean
Dim cmd As IDbCommand = _db.CreateCommand("dbo._OrderDetails_DeleteByPrimaryKey", true)
AddParameter(cmd, "OrderID", orderID)
AddParameter(cmd, "ProductID", productID)
Return 0 < cmd.ExecuteNonQuery()
End Function
''' <summary>
''' Deletes records from the <c>Order Details</c> table using the
''' <c>FK_Order_Details_Orders</c> foreign key.
''' </summary>
''' <param name="orderID">The <c>OrderID</c> column value.</param>
''' <returns>The number of records deleted from the table.</returns>
Public Function DeleteByOrderID(orderID As Integer) As Integer
Return CreateDeleteByOrderIDCommand(orderID).ExecuteNonQuery()
End Function
''' <summary>
''' Creates an <see cref="System.Data.IDbCommand"/> object that can be used to
''' delete records using the <c>FK_Order_Details_Orders</c> foreign key.
''' </summary>
''' <param name="orderID">The <c>OrderID</c> column value.</param>
''' <returns>A reference to the <see cref="System.Data.IDbCommand"/> object.</returns>
Public Overridable Function CreateDeleteByOrderIDCommand(orderID As Integer) As IDbCommand
Dim cmd As IDbCommand = _db.CreateCommand("dbo._OrderDetails_DeleteBy_OrderID", True)
AddParameter(cmd, "OrderID", orderID)
Return cmd
End Function
''' <summary>
''' Deletes records from the <c>Order Details</c> table using the
''' <c>FK_Order_Details_Products</c> foreign key.
''' </summary>
''' <param name="productID">The <c>ProductID</c> column value.</param>
''' <returns>The number of records deleted from the table.</returns>
Public Function DeleteByProductID(productID As Integer) As Integer
Return CreateDeleteByProductIDCommand(productID).ExecuteNonQuery()
End Function
''' <summary>
''' Creates an <see cref="System.Data.IDbCommand"/> object that can be used to
''' delete records using the <c>FK_Order_Details_Products</c> foreign key.
''' </summary>
''' <param name="productID">The <c>ProductID</c> column value.</param>
''' <returns>A reference to the <see cref="System.Data.IDbCommand"/> object.</returns>
Public Overridable Function CreateDeleteByProductIDCommand(productID As Integer) As IDbCommand
Dim cmd As IDbCommand = _db.CreateCommand("dbo._OrderDetails_DeleteBy_ProductID", True)
AddParameter(cmd, "ProductID", productID)
Return cmd
End Function
''' <summary>
''' Deletes <c>Order Details</c> records that match the specified criteria.
''' </summary>
''' <param name="whereSql">The SQL search condition.
''' For example: <c>"FirstName='Smith' AND Zip=75038"</c>.</param>
''' <returns>The number of deleted records.</returns>
Public Function Delete(whereSql As String) As Integer
Return CreateDeleteCommand(whereSql).ExecuteNonQuery()
End Function
''' <summary>
''' Creates an <see cref="System.Data.IDbCommand"/> object that can be used
''' to delete <c>Order Details</c> records that match the specified criteria.
''' </summary>
''' <param name="whereSql">The SQL search condition.
''' For example: <c>"FirstName='Smith' AND Zip=75038"</c>.</param>
''' <returns>A reference to the <see cref="System.Data.IDbCommand"/> object.</returns>
Protected Overridable Function CreateDeleteCommand(whereSql As String) As IDbCommand
Dim sql As String = "DELETE FROM [dbo].[Order Details]"
If Not(whereSql Is Nothing) AndAlso 0 < whereSql.Length Then
sql += " WHERE " + whereSql
End If
Return _db.CreateCommand(sql)
End Function
''' <summary>
''' Deletes all records from the <c>Order Details</c> table.
''' </summary>
''' <returns>The number of deleted records.</returns>
Public Function DeleteAll() As Integer
Return _db.CreateCommand("dbo._OrderDetails_DeleteAll", true).ExecuteNonQuery()
End Function
''' <summary>
''' Reads data using the specified command and returns
''' an array of mapped objects.
''' </summary>
''' <param name="command">The <see cref="System.Data.IDbCommand"/> object.</param>
''' <returns>An array of <see cref="OrderDetailsRow"/> objects.</returns>
Protected Function MapRecords(command As IDbCommand) As OrderDetailsRow()
Dim reader As IDataReader = _db.ExecuteReader(command)
Try
Return MapRecords(reader)
Finally
reader.Dispose()
End Try
End Function
''' <summary>
''' Reads data from the provided data reader and returns
''' an array of mapped objects.
''' </summary>
''' <param name="reader">The <see cref="System.Data.IDataReader"/> object to read data from the table.</param>
''' <returns>An array of <see cref="OrderDetailsRow"/> objects.</returns>
Protected Function MapRecords(reader As IDataReader) As OrderDetailsRow()
Dim totalRecordCount As Integer = -1
Return MapRecords(reader, 0, Integer.MaxValue, totalRecordCount)
End Function
''' <summary>
''' Reads data from the provided data reader and returns
''' an array of mapped objects.
''' </summary>
''' <param name="reader">The <see cref="System.Data.IDataReader"/> object to read data from the table.</param>
''' <param name="startIndex">The index of the first record to map.</param>
''' <param name="length">The number of records to map.</param>
''' <param name="totalRecordCount">A reference parameter that returns the total number
''' of records in the reader object if 0 was passed into the method; otherwise it returns -1.</param>
''' <returns>An array of <see cref="OrderDetailsRow"/> objects.</returns>
Protected Overridable Function MapRecords(reader As IDataReader, startIndex As Integer, _
length As Integer, ByRef totalRecordCount As Integer) As OrderDetailsRow()
If 0 > startIndex Then
Throw New ArgumentOutOfRangeException("startIndex", startIndex, "StartIndex cannot be less than zero.")
End If
If 0 > length Then
Throw New ArgumentOutOfRangeException("length", length, "Length cannot be less than zero.")
End If
Dim orderIDColumnIndex As Integer = reader.GetOrdinal("OrderID")
Dim productIDColumnIndex As Integer = reader.GetOrdinal("ProductID")
Dim unitPriceColumnIndex As Integer = reader.GetOrdinal("UnitPrice")
Dim quantityColumnIndex As Integer = reader.GetOrdinal("Quantity")
Dim discountColumnIndex As Integer = reader.GetOrdinal("Discount")
Dim recordList As System.Collections.ArrayList = New System.Collections.ArrayList()
Dim ri As Integer = -startIndex
While(reader.Read())
ri = ri + 1
If ri > 0 AND ri <= length Then
Dim record As OrderDetailsRow = New OrderDetailsRow()
recordList.Add(record)
record.OrderID = Convert.ToInt32(reader.GetValue(orderIDColumnIndex))
record.ProductID = Convert.ToInt32(reader.GetValue(productIDColumnIndex))
record.UnitPrice = Convert.ToDecimal(reader.GetValue(unitPriceColumnIndex))
record.Quantity = Convert.ToInt16(reader.GetValue(quantityColumnIndex))
record.Discount = Convert.ToSingle(reader.GetValue(discountColumnIndex))
If ri = length AND 0 <> totalRecordCount Then
Exit While
End If
End If
End While
If 0 = totalRecordCount
totalRecordCount = ri + startIndex
Else
totalRecordCount = -1
End If
Return CType(recordList.ToArray(GetType(OrderDetailsRow)), OrderDetailsRow())
End Function
''' <summary>
''' Reads data using the specified command and returns
''' a filled <see cref="System.Data.DataTable"/> object.
''' </summary>
''' <param name="command">The <see cref="System.Data.IDbCommand"/> object.</param>
''' <returns>A reference to the <see cref="System.Data.DataTable"/> object.</returns>
Protected Function MapRecordsToDataTable(command As IDbCommand) As DataTable
Dim reader As IDataReader = _db.ExecuteReader(command)
Try
Return MapRecordsToDataTable(reader)
Finally
reader.Dispose()
End Try
End Function
''' <summary>
''' Reads data from the provided data reader and returns
''' a filled <see cref="System.Data.DataTable"/> object.
''' </summary>
''' <param name="reader">The <see cref="System.Data.IDataReader"/> object to read data from the table.</param>
''' <returns>A reference to the <see cref="System.Data.DataTable"/> object.</returns>
Protected Function MapRecordsToDataTable(reader As IDataReader) As DataTable
Dim totalRecordCount As Integer = 0
Return MapRecordsToDataTable(reader, 0, Integer.MaxValue, totalRecordCount)
End Function
''' <summary>
''' Reads data from the provided data reader and returns
''' a filled <see cref="System.Data.DataTable"/> object.
''' </summary>
''' <param name="reader">The <see cref="System.Data.IDataReader"/> object to read data from the table.</param>
''' <param name="startIndex">The index of the first record to read.</param>
''' <param name="length">The number of records to read.</param>
''' <param name="totalRecordCount">A reference parameter that returns the total number
''' of records in the reader object if 0 was passed into the method; otherwise it returns -1.</param>
''' <returns>A reference to the <see cref="System.Data.DataTable"/> object.</returns>
Protected Overridable Function MapRecordsToDataTable(reader As IDataReader, startIndex As Integer, _
length As Integer, ByRef totalRecordCount As Integer) As DataTable
If 0 > startIndex Then
Throw New ArgumentOutOfRangeException("startIndex", startIndex, "StartIndex cannot be less than zero.")
End If
If 0 > length Then
Throw New ArgumentOutOfRangeException("length", length, "Length cannot be less than zero.")
End If
Dim columnCount As Integer = reader.FieldCount
Dim ri As Integer = -startIndex
Dim dataTable As DataTable = CreateDataTable()
dataTable.BeginLoadData()
Dim values(columnCount - 1) As Object
While(reader.Read())
ri = ri + 1
If ri > 0 AND ri <= length Then
reader.GetValues(values)
dataTable.LoadDataRow(values, True)
If ri = length AND 0 <> totalRecordCount Then
Exit While
End If
End If
End While
dataTable.EndLoadData()
If 0 = totalRecordCount
totalRecordCount = ri + startIndex
Else
totalRecordCount = -1
End If
Return dataTable
End Function
''' <summary>
''' Converts <see cref="System.Data.DataRow"/> to <see cref="OrderDetailsRow"/>.
''' </summary>
''' <param name="row">The <see cref="System.Data.DataRow"/> object to be mapped.</param>
''' <returns>A reference to the <see cref="OrderDetailsRow"/> object.</returns>
Protected Overridable Function MapRow(row As DataRow) As OrderDetailsRow
Dim mappedObject As OrderDetailsRow = New OrderDetailsRow()
Dim dataTable As DataTable = row.Table
Dim dataColumn As DataColumn
' Column "OrderID"
dataColumn = dataTable.Columns("OrderID")
If Not row.IsNull(dataColumn) Then
mappedObject.OrderID = CType(row(dataColumn), Integer)
End If
' Column "ProductID"
dataColumn = dataTable.Columns("ProductID")
If Not row.IsNull(dataColumn) Then
mappedObject.ProductID = CType(row(dataColumn), Integer)
End If
' Column "UnitPrice"
dataColumn = dataTable.Columns("UnitPrice")
If Not row.IsNull(dataColumn) Then
mappedObject.UnitPrice = CType(row(dataColumn), Decimal)
End If
' Column "Quantity"
dataColumn = dataTable.Columns("Quantity")
If Not row.IsNull(dataColumn) Then
mappedObject.Quantity = CType(row(dataColumn), Short)
End If
' Column "Discount"
dataColumn = dataTable.Columns("Discount")
If Not row.IsNull(dataColumn) Then
mappedObject.Discount = CType(row(dataColumn), Single)
End If
Return mappedObject
End Function
''' <summary>
''' Creates a <see cref="System.Data.DataTable"/> object for
''' the <c>Order Details</c> table.
''' </summary>
''' <returns>A reference to the <see cref="System.Data.DataTable"/> object.</returns>
Protected Overridable Function CreateDataTable() As DataTable
Dim dataTable As DataTable = new DataTable()
dataTable.TableName = "OrderDetails"
Dim dataColumn As DataColumn
' Create the "OrderID" column
dataColumn = dataTable.Columns.Add("OrderID", GetType(Integer))
dataColumn.AllowDBNull = False
' Create the "ProductID" column
dataColumn = dataTable.Columns.Add("ProductID", GetType(Integer))
dataColumn.AllowDBNull = False
' Create the "UnitPrice" column
dataColumn = dataTable.Columns.Add("UnitPrice", GetType(Decimal))
dataColumn.AllowDBNull = False
' Create the "Quantity" column
dataColumn = dataTable.Columns.Add("Quantity", GetType(Short))
dataColumn.AllowDBNull = False
' Create the "Discount" column
dataColumn = dataTable.Columns.Add("Discount", GetType(Single))
dataColumn.AllowDBNull = False
Return dataTable
End Function
''' <summary>
''' Adds a new parameter to the specified command.
''' </summary>
''' <param name="cmd">The <see cref="System.Data.IDbCommand"/> object to add the parameter to.</param>
''' <param name="paramName">The name of the parameter.</param>
''' <param name="value">The value of the parameter.</param>
''' <returns>A reference to the added parameter.</returns>
Protected Overridable Function AddParameter(cmd As IDbCommand, paramName As String, _
value As Object) As IDbDataParameter
Dim parameter As IDbDataParameter
Select paramName
Case "OrderID"
parameter = _db.AddParameter(cmd, paramName, DbType.Int32, value)
Case "ProductID"
parameter = _db.AddParameter(cmd, paramName, DbType.Int32, value)
Case "UnitPrice"
parameter = _db.AddParameter(cmd, paramName, DbType.Currency, value)
Case "Quantity"
parameter = _db.AddParameter(cmd, paramName, DbType.Int16, value)
Case "Discount"
parameter = _db.AddParameter(cmd, paramName, DbType.Single, value)
Case Else
Throw New ArgumentException("Unknown parameter name (" + paramName + ").")
End Select
Return parameter
End Function
End Class