its 328 chapter 3: storing data in memory 1. storing data in memory after today you will be able to:...

17
ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1

Upload: ruth-johnston

Post on 29-Dec-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

1

ITS 328CHAPTER 3: STORING DATA IN MEMORY

Page 2: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

2

Storing Data in Memory After today you will be able to:

◦ Explain how a DataTable stores data◦ Add new data rows to a table◦ Examine, update, and remove existing values in a table row◦ Explain how ADO.NET differentiates between pending and final data values◦ Integrate data verification code into your DataTable object

Page 3: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

3

Today’s Exercise Chapter 3 CSharp Project

◦ Open Chapter 3 CSharp.sln in files folder

Add DataRow programmatically (p.41)

Fill Form Display Fields (p.43)

Edit a DataRow (p.43)

Validating Content (p.54)

Page 4: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

4

Creating a Table (Chapter 2) Create a Table

◦ DataTable someTable = new DataTable("Customer");

Add a Column◦ someTable.Columns.Add("ExpireDate", typeof(DateTime));

Add Column with Constraints◦ DataColumn newColumn; // Use to specify properties◦ newColumn = someTable.Columns.Add("FullName", typeof(string));◦ newColumn.MaxLength = 30;◦ newColumn.AllowDBNull = false;◦ newColumn.Unique = true;

Page 5: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

5

Adding Constraints to Columns (Chapter 2)

DataColumn newColumn; // Use to specify properties

newColumn = someTable.Columns.Add("FullName", typeof(string));

newColumn.MaxLength = 30;

newColumn.AllowDBNull = false;

newColumn.Unique = true;

newColumn.Caption = "Student Name";

Page 6: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

6

Adding Data Create a new row object

◦ DataRow oneRow = someTable.NewRow();

Store the actual data values in the row object◦ oneRow.Item[2] = "Joe Schmoe";◦ oneRow["FullName"] = "Joe Schmoe";

Add the row object to the table◦ someTable.Rows.Add(oneRow); // Adds to end of table◦ someTable.Rows.InsertAt(oneRow,0); // Inserts at beginning of table

Add data directly, without row object◦ someTable.Rows.Add(new Object[] {1L, DateTime.Parse("12/31/2016"), "Joe Schmoe"});

Page 7: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

7

Exercise Part 1 – Adding Rows (P. 41)

Open Chapter 3 CSharp project◦ Contains two Windows.Forms classes: AccountManager and AccountDetail

Open AccountManager.cs (F7 from AccountManager Design window)

Locate the Load Form event handler AccountManager_Load

Review Creation of Table◦ oneColumn for adding constraints to columns◦ ColumnChanging event handlers for specifying business rules◦ Primary Key◦ Optional Columns

Page 8: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

8

Exercise Part 1 – Adding Rows (P. 41)

Below "// ----- Build some sample data rows." comment, add:◦ CustomerAccounts.Rows.Add(new Object[] {1L, "Blue Yonder Airlines", true, 500m,

DateTime.Parse("1/1/2007")});◦ CustomerAccounts.Rows.Add(new Object[] {2L, "Fourth Coffee", true, 350m,

DateTime.Parse("7/25/2009")});◦ CustomerAccounts.Rows.Add(new Object[] {3L, "Wingtip Toys", false});◦ Yourself active with a $100 annual fee starting tomorrow.

Notice foreach adding Items to the AllAccounts ListBox component

Page 9: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

9

Exercise Part 2 – Modifying Rows (P. 43)

Examine ActAdd_Click() and ActEdit_Click() button event handlers◦ Each Invokes AccountDetail().EditAccount(ref editRecord, table)

Open AccountDetail.cs [Design]◦ Load event handler fills the fields from DataRow from AccountManager◦ Properties and Events including AccountDetail Load event handler◦ Identify Components: AccountID, AccountName, AnnualFee, StartDate

Arguments◦ eventRecord and CustomerAccounts are arguments from AccountManager◦ whichAccount and baseTable are parameters in AccountDetail◦ AccountEntry and AccountTable are instance names

Page 10: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

10

Exercise Part 2 – Fill Form Code (P. 43)

In AccountDetail_Load() add:if (AccountEntry != null) {

AccountID.Text = string.Format("{0:0}", AccountEntry["ID"]);ActiveAccount.Checked = (bool)AccountEntry["Active"];

if (DBNull.Value.Equals(AccountEntry["FullName"]) == false) AccountName.Text = (string)AccountEntry["FullName"]; if (DBNull.Value.Equals(AccountEntry["AnnualFee"]) == false) AnnualFee.Text = string.Format("{0:0.00}", (decimal)AccountEntry["AnnualFee"]);if (DBNull.Value.Equals(AccountEntry["StartDate"]) == false) StartDate.Text = string.Format("{0:d}", (DateTime)AccountEntry["StartDate"]);

}

Search Google for "c# string.format"

Page 11: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

11

Exercise Part 2 – Click OK Code (P. 43)

Below workArea.BeginEdit(); add:workArea["Active"] = ActiveAccount.Checked;if (AccountName.Text.Trim().Length == 0) workArea["FullName"] = DBNull.Value;else workArea["FullName"] = AccountName.Text.Trim();if (AnnualFee.Text.Trim().Length == 0) workArea["AnnualFee"] = DBNull.Value;else workArea["AnnualFee"] = decimal.Parse(AnnualFee.Text);if (StartDate.Text.Trim().Length == 0) workArea["StartDate"] = DBNull.Value;else workArea["StartDate"] = DateTime.Parse(StartDate.Text);

Page 12: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

12

Deleting Rows Use Remove() or RemoveAt() methods to remove DataRow objects.

Remove() accepts row instance as argument:◦ DataRow oneRow = someTable.Rows[0];◦ someTable.Rows.Remove(oneRow);

RemoveAt() accepts index position as argument◦ someTable.Rows.RemoveAt(0);

Clear() removes all the rows◦ someTable.Rows.Clear();

Page 13: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

13

Batch Processing Allows a batch of changes before committing to any of them

Preferable when changes occurring across multiple rows must be collectively valid

After updates are complete◦ someTable.AcceptChanges(); // Commit all row changes◦ someTable.RejectChanges(); // Reject changes since last commit

Use DataRow.BeginEdit() to postpone data checks and exceptions until DataRow.EndEdit();

Page 14: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

14

Exception-Based Errors Assigning data of the wrong data type to a column value.

Supplying string data to a column that exceeds the maximum length defined in the column’s DataColumn.MaxLength property.

Attempting to store a NULL value in a primary key column.

Adding a duplicate value in a column that has its Unique property set.

Operation that violates one of the table’s custom (e.g., relational) constraints.

Page 15: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

15

Validation-Based Errors DataTable Column and Row Change Event Handlers

◦ ColumnChanging, RowChanging, RowDeleting, TableNewRow◦ ColumnChanged, RowChanged, RowDeleted, TableClearing, TableCleared

Example Check Age column for valid range:private void Applicant_ColumnChanging(Object sender, System.Data.DataColumnChangeEventArgs e) { // ----- Check the Age column for a valid range. if (e.Column.ColumnName == "Age") { if ((int)e.ProposedValue < 18 || (int)e.ProposedValue > 29) e.Row.SetColumnError(e.Column,"Applicant's age falls outside the allowed range."); }}

Page 16: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

16

Exercise Part 3 – Validate Content (P. 54)

Follow the directions on Page 54 checking Annual Fee and Start Date. In the CustomerAccounts_ColumnChanging event handler, add:

if (e.Column.ColumnName == "AnnualFee") { // ----- Annual fee may not be negative. if (DBNull.Value.Equals(e.ProposedValue) == false) { if ((decimal)e.ProposedValue < 0m) e.Row.SetColumnError(e.Column, "Annual fee may not be negative."); }} else if (e.Column.ColumnName == "StartDate") { // ----- Start date must be on or before today. if (DBNull.Value.Equals(e.ProposedValue) == false) { if (((DateTime)e.ProposedValue).Date > DateTime.Today) e.Row.SetColumnError(e.Column, "Start date must occur on or before today."); }}

Page 17: ITS 328 CHAPTER 3: STORING DATA IN MEMORY 1. Storing Data in Memory After today you will be able to: ◦Explain how a DataTable stores data ◦Add new data

17

Exercise Part 3 – Validate Content (P. 54)

In the CustomerAccounts_RowChanging event handler, add the following:if (e.Row.HasVersion(DataRowVersion.Proposed) == true) { if (((bool)e.Row["Active", DataRowVersion.Proposed] == true) && (DBNull.Value.Equals(e.Row["StartDate", DataRowVersion.Proposed]) == true)) e.Row.RowError = "Active accounts must have a valid start date.";}

Run the program to confirm it works.

Make sure the instructor confirms your program works before you leave