Database Application Programming (C#) : Chris North CS 4604: DB
Database Application Programming (C#) : Chris North CS 4604: DB
(C#)
Chris North
CS 4604: DB
DB Connection
DB Adapter
DB SQL Query
DataSet
object
Database
Architecture Layers
App UI
App User
Application
WinForms, Swing
Application
Data Objects
ADO, JDBC
OS
DB API
DB Driver
SQLserver, Jet
Internet, local
DBMS UI
DB Engine
SQLserver, Access
DB Admin
Database
Database
dbConnection: connect to DB
dbCommand: SQL query text
dbAdapter: executes query
DataSet: resulting data
DB
Alternative: DataReader,
retrieve data incrementally
C# DB Example
Get data:
Using System.Data.OleDb;
// Jet = MS Access DB driver
con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/mydb.mdb);
cmd = new OleDbCommand("SELECT * FROM mytable, con); // SQL query
adpt = new OleDbDataAdapter(cmd);
data = new DataSet( );
adpt.Fill(data); // execute the query and put result in data
Display data:
dataGrid1.DataSource = data.Tables[0];
// show the table in the grid control
MessageBox.Show(data.Tables[0].Rows[0][5].ToString( )); // or process manually, this is row 0 col 5
DataReader: (standard)
1 row at a time
No local memory storage
Fetch each row from DB on
demand
cursor = current row
Must stay connected to DB
+ scalability
- each row slow
- random access difficult
Object Model
DataSet:
Tables[n]
Rows[r]
columns[c]
Value, type,
DataReader: (standard)
Columns[c] (current row)
Value, type,
Cursor:
moveNext, MovePrev, moveTo
EOF
Cursors
Forward only vs. forward/back vs. random access
Read only vs. writeable
Connections
Connection strings:
Tons o examples: http://www.connectionstrings.com/
Con.open( )
Queries here
Con.close( ) // connections consume resources
Adapter.Fill( ) does open/close automatically
Commands (Queries)
Command Types:
SQL Query:
Relation: SELECT
Scalar: SELECT that returns 1 row, 1 col
Non-query: INSERT, UPDATE, DELETE
Table name
View name
Rdr = Cmd.ExecuteReader( );
Query Parameters
Want to substitute a parameter value into a query
Dynamic SQL query construction:
cmd = new OleDbCommand(
"SELECT * FROM table WHERE myAttr = " + myValue, con);
DataBound UI Controls
Display a table:
DataGrid
Display a column:
DataGrid control
-scroll, sort, edit,
DataList
listBox
ComboBox
TextBox
// analogous to adpt.Fill(data);
Visualization
Draw graphics in Paint event
Scale data coords to pixel coords
E.g. scatterplot:
foreach(DataRow r in dataSet1.Tables[0].Rows) // for each row
{
x = r[attr1] * Width / maxValue1; // Scale x,y to fit into window
y = Height - r[attr2] * Height / maxValue2; // also flip y axis
e.Graphics.FillEllipse(Brushes.Red, x, y, 10, 10);
}
Interaction
Mouse Events
Scale mouse coords back into data coords
Parameterized SQL query
E.g. 2 clicks define a rectangle: