Data Access using ADO.NET

Lesson 1

Disconnected Data Access


Data Set



Data Provider



DataReader Vs DataSet

Lesson 2

Connecting to DB


OleDbConnection myConnection = new OleDbConnection();


myConnection.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\\Northwind.mdb”;


Using Command


SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");


SqlCommand salesCMD = new SqlCommand("SalesByCategory", nwindConn);

salesCMD.CommandType = CommandType.StoredProcedure;


SqlParameter myParm = salesCMD.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15);

myParm.Value = "Beverages";


nwindConn.Open();


SqlDataReader myReader = salesCMD.ExecuteReader();


Console.WriteLine("{0}, {1}", myReader.GetName(0), myReader.GetName(1));


while (myReader.Read())

{

Console.WriteLine("{0}, ${1}", myReader.GetString(0), myReader.GetDecimal(1));

}


myReader.Close();

nwindConn.Close();




SqlConnection pubsConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=pubs;");

SqlCommand logoCMD = new SqlCommand("SELECT pub_id, logo FROM pub_info", pubsConn);


FileStream fs; // Writes the BLOB to a file

// (*.bmp).

BinaryWriter bw; // Streams the BLOB to the FileStream object.


int bufferSize = 100; // Size of the BLOB buffer.

byte[] outbyte = new byte[bufferSize]; // The BLOB byte[] buffer to

// be filled by GetBytes.

long retval; // The bytes returned from

// GetBytes.

long startIndex = 0; // The starting position in

// the BLOB output.


string pub_id = ""; // The publisher id to use in

// the file name.


// Open the connection and read data into the DataReader.

pubsConn.Open();

SqlDataReader myReader = logoCMD.ExecuteReader(CommandBehavior.SequentialAccess);


while (myReader.Read())

{

// Get the publisher id, which must occur before getting the logo.

pub_id = myReader.GetString(0);


// Create a file to hold the output.

fs = new FileStream("logo" + pub_id + ".bmp", FileMode.OpenOrCreate, FileAccess.Write);

bw = new BinaryWriter(fs);


// Reset the starting byte for the new BLOB.

startIndex = 0;


// Read the bytes into outbyte[] and retain the number of bytes

// returned.

retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);


// Continue reading and writing while there are bytes beyond the

// size of the buffer.

while (retval == bufferSize)

{

bw.Write(outbyte);

bw.Flush();


// Reposition the start index to the end of the last buffer and

// fill the buffer.

startIndex+= bufferSize;

retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);

}


// Write the remaining buffer.

bw.Write(outbyte);

bw.Flush();


// Close the output file.

bw.Close();

fs.Close();

}


// Close the reader and the connection.

myReader.Close();

pubsConn.Close();


Using DataReaders


System.Data.SqlClient.SqlDataReader mySqlReader;

mySqlReader = mySqlCommand.ExecuteReader();



while(mySqlReader.Read())

{

object myObject = myDataReader[3];

object myOtherObject = mydataReader[“CustID”];

}





do

{

while(myReader.Read())

{

// Loop through records of RecordSet

}

} while (myReader.NextResult());



string Cmd = “DELETE * FROM Employees WHERE Name=’” & aString & “’”;

OleDbCommand myCommand = new OleDbCommand(Cmd, myConnection);


myConnection.Open();

myCommand.ExecuteNonQuery();

myConnection.Close();



DataTable schemaTable = myReader.GetSchemaTable();


foreach (DataRow myRow in schemaTable.Rows)

{

foreach (DataColumn myCol in

schemaTable.Columns)

{

Console.WriteLine(myCol.ColumnName + " = " +

myRow[myCol]);

}

Console.WriteLine();

}



Creating Data Adapters


Using Data Adapters


DataSet myDataSet = new DataSet();


// Assume existence of Data Adapter named myDataAdapter

myDataAdapter.Fill(myDataSet, “Customers”);





// Populate list of customers from SQL 2000 database and Orders from

// Access database, establish relation between tables, display list

// of customers and their orders

SqlConnection custConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");

SqlDataAdapter custDA = new SqlDataAdapter("SELECT * FROM Customers", custConn);


OleDbConnection orderConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +

"Data Source=c:\\Program Files\\Microsoft Office\\Office\\Samples\\northwind.mdb;");

OleDbDataAdapter orderDA = new OleDbDataAdapter("SELECT * FROM Orders", orderConn);


custConn.Open();

orderConn.Open();


DataSet custDS = new DataSet();


custDA.Fill(custDS, "Customers");

orderDA.Fill(custDS, "Orders");


custConn.Close();

orderConn.Close();


DataRelation custOrderRel = custDS.Relations.Add("CustOrders",

custDS.Tables["Customers"].Columns["CustomerID"],

custDS.Tables["Orders"].Columns["CustomerID"]);


foreach (DataRow pRow in custDS.Tables["Customers"].Rows)

{

Console.WriteLine(pRow["CustomerID"]);

foreach (DataRow cRow in pRow.GetChildRows(custOrderRel))

Console.WriteLine("\t" + cRow["OrderID"]);

}




// Obtain schema via FillSchema()

DataSet custDS = new DataSet();

custDA.FillSchema(custDS, SchemaType.Source, "Customers");

custDA.Fill(custDS, "Customers");


// Obtain schema via Fill()

DataSet custDS = new DataSet();

custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;

custDA.Fill(custDS, "Customers");



workAdapter.TableMappings.Add(“AuthorsMapping”, “MyAuthors”);



DataTableMapping custMap = custDA.TableMappings.Add("Table",

"NorthwindCustomers");

custMap.ColumnMappings.Add( "CompanyName", "Company");

custMap.ColumnMappings.Add( "ContactName", "Contact");

custMap.ColumnMappings.Add( "PostalCode", "ZIPCode");


custDA.Fill(custDS);



custDA.TableMappings.Add("Customers1", "Orders")

custDA.Fill(custDS, "Customers")


Typed DataSets


Lesson 3

Filling DataSet without DataAdapter


DataSet myDataSet = new DataSet();


DataTable myTable = new DataTable();

myDataSet.Tables.Add(myTable);


DataColumn AccountsColumn = new DataColumn(“Accounts”);

myDataSet.Tables[0].Columns.Add(accountsColumn);


DataRow myRow;

myRow = myDataSet.Tables[0].NewRow();


for(int i=0; I < StringCollection.Count; i++)

{

myRow.Item[counter] = StringCollection [i];

}


myDataSet.Tables(0).Rows.Add(myRow);



DataSet myDataSet = new DataSet();


DataTable aTable = new DataTable(“Table 1”);

myDataSet.Tables.Add(aTable);


DataColumn aColumn;

for(int counter=0; counter <7 ;counter++)

{

aColumn = new DataColumn(“Column “ +

counter.ToStgring());

mydataSet.Tables[“Table 1”].Columns.Add

(aColumn);

}


System.IO.StreamReader myReader = new System.IO.StreamReader(“C:\\File.txt”);


String myString;


while (myReader.Peek() != -1)

{

myString = myReader.ReadLine();

myDataSet.Tables[“Table 1”].Rows.Add

(myString.Split(char.Parse(“,”)));

}


Data Relation Objects


DataRelation myRelation = new DataRelation(“Data Relation 1”, column1, column2);

myDataSet.Relations.Add(myRelation);



DatasRow[] ChildRows;

DataRow ParentRow;


// Return all child rows of row 1 as defined by CustomersOrders

ChildRows = myDataSet.Tables[“Customers”].Rows[1].GetChildRows(CustomersOrders);


// Return parent of row 5 as defined by CustomersOrders

ParentRow = myDataSet.Tables[“Orders”].Rows[5].GetParentRow(CustomersOrders);


Constraints



UniqueConstraint myConstraint = new

UniqueConstraint(myDataRow);

myDataTable.Constraints.Add(myConstraint);



DataColumn[] myColumns = new DataColumn[2];

myColumns[0] =

EmployeesTable.Columns[“FirstName”];

myColumns[0] =

EmployeesTable.Columns[“LastName”];

UniqueConstraint myConstraint = new

UniqueConstraint(myColumns);

EmployeesTable.Constraints.Add(myConstraint);



ForeignKeyConstraint myConstraint = new

ForeignKeyConstraint(CustomersTbl.Columns[“Cust

omerID”], OrdersTbl.Columns[“CustomerID”]);


CustomersTbl.Constraints.Add(myConstraint);



Editing Data



myDataRow[2] = “Splunge”;

myDataRow[“Customers”] = “Winthrop”;



myDataRow.RejectChanges();




Updating Database


myDataAdapter.Update();

myOtherDataAdapter.Update(myDataTable);



System.Data.OleDb.OleDbTransaction myTransaction = null;

try

{

myConnection.Open();

myTransaction = myConnection.BeginTransaction();



myTransaction.Commit();

}

catch(Exception ex)

{

mytransaction.Rollback();

}

finally

{

myConnection.Close();

}


Handling Update Errors


private void myDataAdapter_RowUpdated( object sender, System.Data.SqlClient.SqlRowUpdatedEventArgs e)

{

if(e.Status == UpdateStatus.ErrorsOccured)

{

e.Status = UpdateStatus.SkipCurrentRow;

}

}


Lesson 4

Data Binding


Data Providers


Data Consumers


Create Simple bound control



TextBox1.DataBindings.Add(“Text”, DataSet1.Customers, “CustomerID”);



Data Currency


this.BindingContext[DataSet1.Customers].Position = 0;

thid.bindingContext[DataSet1.Customers].Position++;



Complex Binding


ComboBox1.DataSource = DataSet1.Customers;

ComboBox1.DisplayMember = “CustomerID”;


Filtering and Sorting



DataView myDataView = new DataView(myDataTable);


Or


DataView myDataView = new DataView();

myDataView.Table = myDataTable;



myDataView.Sort = “CustomerID”;

myOtherView.Sort = “State, City”;

myDescView.Sort = “State DESC, City”;



myDataView.RowFilter = “City = ‘Seattle’”;


myDataView.RowFilter = “City = ‘Des Moines’ AND (NOT State =’IA’)”;


myDataView.RowFilter = “Price *1.086 <= 500”;


myDataView.RowFilter = “City IN (‘Seattle’, ‘Tacoma’, ‘Blaine’);


myDataView.RowFilter = “City LIKE ‘Se*t%e’”;





DataViewManager myManager = new

DataViewManager(myDataSet);


DataViewManager myOtherManager = new

DataViewManager();

myOtherManager.DataSet = myOtherDataSet;



// Set RowFilter property of DataView associated

// with Customers table

myDataViewManager.DataViewSettings[“Customers”]

.RowFilter = “State = ‘WA’”;



DataView myDataView;

myDataView =

myDataViewManager.CreateDataView(DataSet1.Tables[0]);


Lesson 5

Retrieving XmlReader from SqlCommand


System.Xml.XmlReader myReader;

SqlCommand mySQLCommand = new SqlCommand(“SELECT *

FROM Customers FOR XML AUTO, XMLDATA”,

SqlConnection1);


SqlConnection1.Open();

myReader = mySQLCommand.ExecuteXmlReader();


while(myReader.Read())

{

// Write content and markup of node and its

// children

Console.WriteLine(myReader.ReadOuterXml());

}


myReader.Close();

SqlConnection1.Close();


Reading XML into DataSet


Writing XML from DataSet


XmlDataDocument


XmlDataDocument myDocument = new

XmlDataDocument(myDataSet);



XmlDataDocument mydocument = new XmlDataDocument();

myDocument.DataSet.ReadXmlSchema(“C:\\myXml.xml”);

myDocument.Load(“C:\\myXml.xml”);


XSLT Transformations


Xml.Xsl.XslTransform myTransform = new

Xml.Xsl.XslTransform();

myTransform.Load(“C:\\myStyle.xsl”);


System.IO.StreamWriter myWriter = new

System.IO.StreamWriter(“myfile.txt”);

myTransform.Transform(myDocument, null, myWriter);