Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2012-2013
Program No. 1 Develop a database application to demonstrate storing and retrieving of BLOB and CLOB object using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Data.SqlClient; using System.Windows.Forms; using System.IO; namespace BLOB { public partial class Form1 : Form { Image curImage; String curFilename; String connectionString = "server=localhost;database=college;user id=sa;password=password"; String savedImageName = ""; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog openDlg = new OpenFileDialog(); if (openDlg.ShowDialog() == DialogResult.OK) { curFilename = openDlg.FileName; textBox3.Text = curFilename; } } private void button2_Click(object sender, EventArgs e) { if (textBox3.Text != "") { FileStream file = new FileStream(curFilename, FileMode.OpenOrCreate, FileAccess.Read); byte[] rawdata = new byte[file.Length]; file.Read(rawdata, 0, System.Convert.ToInt32(file.Length)); file.Close(); String sql = "SELECT * FROM EMPLOYEES"; SqlConnection con = new SqlConnection(); Department of Computer Science & Engineering, V.T.U. PG Centre, Gulbarga. Page 1
2012-2013
con.ConnectionString = connectionString; con.Open(); SqlDataAdapter adapter = new SqlDataAdapter(sql, con); SqlCommandBuilder cmb = new SqlCommandBuilder(adapter); DataSet ds = new DataSet("EMPLOYEES"); adapter.Fill(ds, "EMPLOYEES"); DataRow row = ds.Tables["EMPLOYEES"].NewRow(); row["empcode"] = textBox1.Text; row["ename"] = textBox2.Text; row["photo"] = rawdata; ds.Tables["EMPLOYEES"].Rows.Add(row); adapter.Update(ds, "EMPLOYEES"); con.Close(); MessageBox.Show("Image Saved"); } } private void button3_Click(object sender, EventArgs e) { if (textBox1.Text != "") { String sql = "Select * from employees where empcode=" + textBox1.Text; SqlConnection con = new SqlConnection(); con.ConnectionString = connectionString; con.Open(); FileStream file; BinaryWriter bw; int buffersize = 100; byte[] outbyte = new byte[buffersize]; long retval; long startindex = 0; SqlCommand command = new SqlCommand(sql, con); SqlDataReader myReader = command.ExecuteReader(CommandBehavior.SequentialAccess); savedImageName = textBox3.Text; while (myReader.Read()) { file = new FileStream(savedImageName, FileMode.OpenOrCreate, FileAccess.Write ); bw = new BinaryWriter(file); startindex = 0; retval = myReader.GetBytes(2, startindex, outbyte, 0, buffersize); while (retval == buffersize) { bw.Write(outbyte); bw.Flush(); startindex += buffersize; retval = myReader.GetBytes(2, startindex, outbyte, 0, buffersize); } Department of Computer Science & Engineering, V.T.U. PG Centre, Gulbarga. Page 2
Advances in Database Management Laboratory bw.Write(outbyte, 0, (int)retval - 1); bw.Flush(); bw.Close(); file.Close(); } con.Close(); curImage = Image.FromFile(savedImageName); pictureBox1.Image = curImage; pictureBox1.Invalidate(); con.Close(); } } } } Output:
2012-2013
Program No. 2 Department of Computer Science & Engineering, V.T.U. PG Centre, Gulbarga. Page 3
2012-2013
Develop a database application to demonstrate the representation of multivalued attributes, and use of nested tables to represent complex objects. Write suitable queries to demonstrate it. SQL> CREATE TYPE t_experience AS OBJECT ( CompanyName varchar2(20), Position varchar2(20), NoOfYears number(2) ); Type created. SQL> CREATE TYPE t_experience_tbl AS TABLE OF t_experience; Type created. SQL> CREATE TABLE employees ( Name varchar2(20), Experiences t_experience_tbl) NESTED TABLE Experiences STORE AS Experiences_tab; Table created. SQL> insert into employees values ( 'jag', t_experience_tbl ( t_experience('abc company','Software Engineer',3), t_experience('xyz company','System Analyst',2), t_experience('mnp company','Research fellow',4) ) ); 1 row created. SQL> insert into employees values ( 'gaj', t_experience_tbl ( t_experience('git','ai',1), t_experience('git','l',3) ) ); 1 row created.
Program No. 3
Page 4
2012-2013
Design and develop a suitable Student Database application. One of the attributes to me maintained is the attendance of a student in each subject for which he/she has enrolled. Using TRIGGERS, we write active rules to do the following: A. Whenever attendance is updated, check if the attendance is less than 85%; if so notify the Head of Department concerned. B. Whenever the marks in the Internal Assessment Test are entered, check if the marks are less than 40%; if so, notify the Head of the Department concerned.
PART A:
SQL> create table attendance( usn varchar2(10) primary key, att1 integer, att2 integer, att3 integer, att4 integer, att5 integer, att6 integer ); Table created. SQL> insert into attendance values('2AE05cs001', 10,10,10,10,10,10); 1 row created. SQL> insert into attendance values('2AE05cs002', 11,11,11,11,11,11); 1 row created. SQL> insert into attendance values('2AE05cs003', 10,11,8,7,10,11); 1 row created. SQL> select * from attendance; USN ATT1 ATT2 ATT3 ATT4 ATT5 ---------- ---------- ---------- ---------- ---------- ---------- ---------2AE05cs001 10 10 10 10 10 10 2AE05cs002 11 11 11 11 11 11 2AE05cs003 10 11 8 7 10 11 ATT6
SQL> create or replace trigger atrigger after update on attendance Department of Computer Science & Engineering, V.T.U. PG Centre, Gulbarga. Page 5
Advances in Database Management Laboratory for each row declare attn_exception1 exception; attn_exception2 exception; attn_exception3 exception; attn_exception4 exception; attn_exception5 exception; attn_exception6 exception; total_classes integer; begin total_classes:=&total_classes; if :new.att1/total_classes*100<85 then raise attn_exception1; elsif :new.att2/total_classes*100<85 then raise attn_exception2; elsif :new.att3/total_classes*100<85 then raise attn_exception3; elsif :new.att4/total_classes*100<85 then raise attn_exception4; elsif :new.att5/total_classes*100<85 then raise attn_exception5; elsif :new.att6/total_classes*100<85 then raise attn_exception6; end if; exception when attn_exception1 then raise_application_error(-20001,'Attendance less than 85% in Subject 1'); when attn_exception2 then raise_application_error(-20002,'Attendance less than 85% in Subject 2'); when attn_exception3 then raise_application_error(-20003,'Attendance less than 85% in Subject 3'); when attn_exception4 then raise_application_error(-20004,'Attendance less than 85% in Subject 4'); when attn_exception5 then raise_application_error(-20005,'Attendance less than 85% in Subject 5'); when attn_exception6 then raise_application_error(-20006,'Attendance less than 85% in Subject 6'); end; Enter value for total_classes: 50 old 13: total_classes:=&total_classes; new 13: total_classes:=50; Trigger created.
2012-2013
2012-2013
SQL> UPDATE ATTENDANCE 2 SET ATT1=5 3 WHERE USN='2AE04is051'; UPDATE ATTENDANCE * ERROR at line 1: ORA-20001: Attendance less than 85% in Subject 1 ORA-06512: at "MTECH.ATRIGGER", line 26 ORA-04088: error during execution of trigger 'MTECH.ATRIGGER' SQL> UPDATE ATTENDANCE SET ATT1=46,ATT2=45,ATT3=47,ATT4=48,ATT5=49,ATT6=47 WHERE USN='2AE04is051'; 1 row updated.
PART B:
SQL> create table marks( usn varchar2(10) primary key, m1 integer, m2 integer, m3 integer, m4 integer, m5 integer, m6 integer); Table created. SQL> insert into marks values('2AE05cs012', 10,10,10,10,10,10); 1 row created. SQL> insert into marks values('2AE05cs002', 11,11,11,11,11,11); 1 row created. SQL> insert into marks values('2AE05cs018', 20,11,18,17,10,11); 1 row created. SQL> select * from marks; USN M1 M2 M3 M4 M5 M6 Page 7
Advances in Database Management Laboratory ---------- ---------- ---------- ---------- ---------- ---------- ---------2gi05cs012 10 10 10 10 10 10 2gi05cs002 11 11 11 11 11 11 2gi05cs018 20 11 18 17 10 11 SQL> create or replace trigger mtrigger after insert or update on marks for each row declare marks_exception1 exception; marks_exception2 exception; marks_exception3 exception; marks_exception4 exception; marks_exception5 exception; marks_exception6 exception; maximum_marks integer; begin maximum_marks:=&maximum_marks; if :new.m1/maximum_marks*100<40 then raise marks_exception1; elsif :new.m2/maximum_marks*100<40 then raise marks_exception2; elsif :new.m3/maximum_marks*100<40 then raise marks_exception3; elsif :new.m4/maximum_marks*100<40 then raise marks_exception4; elsif :new.m5/maximum_marks*100<40 then raise marks_exception5; elsif :new.m6/maximum_marks*100<40 then raise marks_exception6; end if; exception when marks_exception1 then raise_application_error(-20001,'Marks less than 40% in M1'); when marks_exception2 then raise_application_error(-20002,'Marks less than 40% in M2'); when marks_exception3 then raise_application_error(-20003,'Marks less than 40% in M3'); when marks_exception4 then raise_application_error(-20004,'Marks less than 40% in M4'); when marks_exception5 then raise_application_error(-20005,'Marks less than 40% in M5'); when marks_exception6 then raise_application_error(-20006,'Marks less than 40% in M6'); end; Department of Computer Science & Engineering, V.T.U. PG Centre, Gulbarga.
2012-2013
Page 8
Advances in Database Management Laboratory / Enter value for maximum_marks: 100 old 13: maximum_marks:=&maximum_marks; new 13: maximum_marks:=100; Trigger created.
2012-2013
Program No. 4
Page 9
2012-2013
Design, develop and execute a program in a language of your choice to implement any one algorithm for mining association rules. Run the program against any large database available in the public domain and discuss the results.
Collapse
2012-2013
private List<clssRules> GenerateRules() { List<clssRules> lstRulesReturn = new List<clssRules>(); foreach (string strItem in m_dicAllFrequentItems.Keys) { if (strItem.Length > 1) { int nMaxCombinationLength = strItem.Length / 2; GenerateCombination(strItem, nMaxCombinationLength, ref lstRulesReturn); } } return lstRulesReturn; } private void GenerateCombination(string strItem, int nCombinationLength, ref List<clssRules> lstRulesReturn) { int nItemLength = strItem.Length; if (nItemLength == 2) { AddItem(strItem[0].ToString(), strItem, ref lstRulesReturn); return; } else if (nItemLength == 3) { for (int i = 0; i < nItemLength; i++) { AddItem(strItem[i].ToString(), strItem, ref lstRulesReturn); } return; } else { for (int i = 0; i < nItemLength; i++) { GetCombinationRecursive(strItem[i].ToString(), strItem, nCombinationLength, ref lstRulesReturn); } } } private void Solve() { double dMinSupport = double.Parse(txt_Support.Text) / 100; double dMinConfidence = double.Parse(txt_Confidence.Text) / 100; ////Scan the transaction database to get the support S of each 1itemset, Dictionary<string, double> dic_FrequentItemsL1 = GetL1FrequentItems(dMinSupport); Dictionary<string, double> dic_FrequentItems = dic_FrequentItemsL1; Dictionary<string, double> dic_Candidates = new Dictionary<string, double>();
Page 11
2012-2013
dic_Candidates = GenerateCandidates(dic_FrequentItems); dic_FrequentItems = GetFrequentItems(dic_Candidates, dMinSupport); } while (dic_Candidates.Count != 0); Dictionary<string, Dictionary<string, double>> dicClosedItemSets = GetClosedItemSets(); List<string> lstMaximalItemSets = GetMaximalItemSets(dicClosedItemSets); List<clssRules> lstRules = GenerateRules(); List<clssRules> lstStrongRules = GetStrongRules(dMinConfidence, lstRules); frmOutput objfrmOutput = new frmOutput(m_dicAllFrequentItems, dicClosedItemSets, lstMaximalItemSets, lstStrongRules); objfrmOutput.ShowDialog(); }
Page 12
2012-2013
Page 13