ADO.NET (cont.) Acesso a Bases de DadosADO .NET Namespace System.Data Modos de aceder à informação OLE DB – namespace System.Data.OleDb SQL - namespace System.Data.SqlClient Aplicativo .Net Objectos OLE DB Objectos OLE DB OLE DB TDS Informação Informação SQL Server 1 Arquitectura ADO .NET 2 Acesso a Bases de Dados 3 .Net Data Providers SQL Server - System.Data.SqlClient OLE DB - System.Data.OleDb ODBC - System.Data.Odbc Oracle - System.Data.OracleClient. Objectos: Connection Estabelece a comunicação com a fonte de dados Command Executa um comando na fonte de dados DataReader Lê sequencialmente de uma fonte de dados – só leitura DataAdapter Preenche um DataSet 4 Objecto Connection SqlConnection / OleDbConnection string strConn = "data source=localhost; " + "initial catalog=northwind; " + "integrated security=true"; SqlConnection conn = new SqlConnection(strConn); Parâmetros da string de conexão Connection timeout Data source Initial catalog Integrated security Password Persist security info Provider User ID 5 Objecto Command SqlCommand / OleDbCommand SqlCommand com = new SqlCommand(); com.Connection = conn; com.CommandText="Select * From Tabela;"; SqlDataReader Info = com.ExecuteReader(); Propriedades: Connection Command Text Parameters 6 Objecto Command Executar comandos SQL ExecuteReader – executa comandos que devolvam linhas de informação (ex: SELECT) ExecuteNonQuery – executa comandos que retornam dados (ex: INSERT, UPDATE, DELETE) ExecuteScalar - retorna um valor único como resultado de uma função agregada (ex: COUNT) 7 Data Command private System.Data.OleDb.OleDbConnection private System.Data.OleDb.OleDbCommand myConnection; cmd; String connstr="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + strpath; String strsql="Insert into Produtos (IdCat,NomeProd,Preco) Values ('1','" + nomeprod + "'," + "'" + preco +"')" ; myConnection=new System.Data.OleDb.OleDbConnection(connstr); myConnection.Open(); cmd=new OleDbCommand (strsql,myConnection); (*) cmd.ExecuteNonQuery(); myConnection.Close(); (*) cmd=new OleDbCommand(); cmd.Connection=myConnection; cmd.CommandText=strsql; Construtores ou Propriedades 8 Data Command Utilização de parâmetros no SQL String strsql = "Insert into Produtos (IdCat,NomeProd,Preco) Values (?,?,?)"; myConnection = new OleDbConnection(myConnectionstr); cmd = new System.Data.OleDb.OleDbCommand( ); cmd.Connection = myConnection; cmd.CommandText = strsql; cmd.Parameters.AddWithValue("idcat",idcat); cmd.Parameters.AddWithValue("nomeprod",nomeprod); cmd.Parameters.AddWithValue("preco",preco); 9 Objecto DataReader SqlDataReader / OleDbDataReader SqlDataReader Info = com.ExecuteReader(); DataGrid1.DataSource=Info; Percurso forward-only em modo read-only Criado através do método executeReader de um objecto Command • Pode ser associado ao DataSource de Server Controls Propriedades e métodos mais usais FieldCount IsClosed Close GetString GetInt32 10 Objecto DataReader • DataSource de Server Controls string sql ="SELECT OrderID, CustomerID FROM orders"; OleDbConnection conn = new OleDbConnection(connstr); OleDbCommand cmd = new OleDbCommand(sql,conn); conn.Open(); OleDbDataReader myReader; myReader = myCommand.ExecuteReader(); DataGrid1.DataSource=myReader; DataGrid1.DataBind(); 11 Objecto DataReader Métodos: Read – lê um registo do resultado do Query, permite iterar sobre o objecto GetFloat, GetInt, GetString, etc – permite aceder aos campos do registo GetSchemaTable – Devolve um Data Table com a informação do Schema do resultado do Query while (dtreader.Read()) { HyperLink hlink=new HyperLink(); hlink.Text=dtreader.GetString(1); // (string)dtreader[“NomeCat”]; hlink.NavigateUrl="http://localhost/produtos.aspx?prod= "+dtreader.GetInt32(0); Panel1.Controls.Add(hlink); Panel1.Controls.Add(new LiteralControl("<P/>")); } 12 DataSet • DataSet representa uma colecção de tabelas (objectos DataTables) , juntamente com restrições e relações entre tabelas •Estrutura relacional em memória •Usa o DataAdapter para fazer a ligação com a fonte de dados 13 What is a Dataset? DataSet DataTable DataTable DataTable SqlDataAdapter Web server memory SqlConnection OleDbDataAdapter Physical storage OleDbConnection SQL Server 2000 OleDb Database 14 Data Adapters DataSet DataAdapter SelectCommand UpdateCommand InsertCommand DeleteCommand DataReader Command Command Command Command Connection sp_SELECT sp_UPDATE sp_INSERT sp_DELETE Database 15 DataAdapter Criar um DataAdapter SqlDataAdapter da = new SqlDataAdapter ("select * from Authors",conn); Propriedades do comando SelectCommand da.SelectCommand.CommandText da.SelectCommand.Connection Definir os comandos InsertCommand, UpdateCommand, and DeleteCommand, se necessário da.Insertcommand da.UpdateCommand 16 Creating a DataSet Criar um DataSet Fill – executa o SelectCommand DataSet ds = new DataSet(); da.Fill(ds, "Authors"); Access a DataTable ds.Tables["Authors"].Rows.Count; string str=""; foreach(DataRow r in ds.Tables["Authors"].Rows) { str += r[2]; str += r["au_lname"]; } 17 DataAdapder / DataSet • Datasource de um Controlo … String strconn="Provider=Microsoft.Jet.OLEDB.4.0; …. String strsql="Select * from produtos where IdCat=“ + id; conn=new OleDbConnection(); conn.ConnectionString=strconn; dadapter=new OleDbDataAdapter (strsql,conn); dataset=new DataSet(); dadapter.Fill(dataset,”Produtos”); dgrid.DataSource=dataset; dgrid.DataBind(); 18 DataAdapder / DataSet Aceder às tabelas no DataSet Usar Tables para aceder à tabela Produtos Objecto DataTable DataTable dt =dataset.Tables[“Produtos"] Aceder às linhas da tabela Usar Rows Objecto DataRow DataRow dr= dataset.Tables["Produtos”].Rows foreach (DataRow dr in dataset.Tables[“Produtos"].Rows) 19