ODP.NET - Working with Bind Variables together with OracleParameter
With the help of OracleParameter, you can include bind variables within any SQL statement. These bind variables are nothing but run-time query parameters. The values in the SQL statement are bound at run time when we use bind variables.
If the same SQL statement is being continuously used (with different values), it is recommended to work with bind variables. When you use bind variables in SQL statements, the statements would automatically cache at server level to improve performance during repeated database operations of the same type.
Following is a simple example that includes a bind variable in a SELECT statement followed by OracleParameter, which fills the bind variable with a value:
Imports Oracle.DataAccess.Client Public Class Form11 Private Sub btnGetEmployee_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetEmployee.Click 'create connection to db Dim cn As New OracleConnection("Data Source=xe; _ User Id=scott;Password=tiger") Try 'create command object to work with SELECT Dim cmd As New OracleCommand("SELECT empno, _ ename, sal, job FROM emp WHERE empno=:empno", cn) cmd.Parameters.Add(New OracleParameter(":empno", Me.txtEmpno.Text)) 'open the connection cmd.Connection.Open() 'get the DataReader object from command object Dim rdr As OracleDataReader = _ cmd.ExecuteReader(CommandBehavior.CloseConnection) 'check if it has any rows If rdr.HasRows Then 'read the first row rdr.Read() 'extract the details Me.txtEmpno.Text = rdr("empno") Me.txtEname.Text = rdr("ename") Me.txtSal.Text = rdr("sal") Me.txtJob.Text = rdr("job") Else 'display message if no rows found MessageBox.Show("Not found") End If 'clear up the resources rdr.Close() Catch ex As Exception 'display if any error occurs MessageBox.Show("Error: " & ex.Message) 'close the connection if it is still open If cn.State = ConnectionState.Open Then cn.Close() End If End Try End Sub End Class
Imports%20Oracle.DataAccess.Client%20%0A%0APublic%20Class%20Form11%20%0A%0A%20%20%20Private%20Sub%20btnGetEmployee_Click%28ByVal%20sender%20As%20%0A%20%20%20System.Object%2C%20ByVal%20e%20As%20System.EventArgs%29%20Handles%20%0A%20%20%20btnGetEmployee.Click%20%0A%20%20%20%20%20%20%27create%20connection%20to%20db%20%0A%20%20%20%20%20%20Dim%20cn%20As%20New%20OracleConnection%28%22Data%20Source%3Dxe%3B%20_%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20User%20Id%3Dscott%3BPassword%3Dtiger%22%29%20%0A%20%20%20%20%20%20Try%20%0A%20%20%20%20%20%20%20%20%27create%20command%20object%20to%20work%20with%20SELECT%20%0A%0A%20%20%20%20%20%20%20%20Dim%20cmd%20As%20New%20OracleCommand%28%22SELECT%20empno%2C%20_%20%0A%20%20%20%20%20%20%20%20ename%2C%20sal%2C%20job%20FROM%20emp%20WHERE%20empno%3D%3Aempno%22%2C%20cn%29%20%0A%20%20%20%20%20%20%20%20cmd.Parameters.Add%28New%20OracleParameter%28%22%3Aempno%22%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Me.txtEmpno.Text%29%29%20%0A%20%20%20%20%20%20%20%20%27open%20the%20connection%20%0A%20%20%20%20%20%20%20%20cmd.Connection.Open%28%29%20%0A%20%20%20%20%20%20%20%20%27get%20the%20DataReader%20object%20from%20command%20object%20%0A%20%20%20%20%20%20%20%20Dim%20rdr%20As%20OracleDataReader%20%3D%20_%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20cmd.ExecuteReader%28CommandBehavior.CloseConnection%29%20%0A%20%20%20%20%20%20%20%20%27check%20if%20it%20has%20any%20rows%20%0A%20%20%20%20%20%20%20%20If%20rdr.HasRows%20Then%20%0A%20%20%20%20%20%20%20%20%20%20%20%27read%20the%20first%20row%20%0A%20%20%20%20%20%20%20%20%20%20%20rdr.Read%28%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%27extract%20the%20details%20%0A%20%20%20%20%20%20%20%20%20%20%20Me.txtEmpno.Text%20%3D%20rdr%28%22empno%22%29%20%0A%20%20%20%20%20%20%20%20%20%20%20Me.txtEname.Text%20%3D%20rdr%28%22ename%22%29%20%0A%20%20%20%20%20%20%20%20%20%20%20Me.txtSal.Text%20%3D%20rdr%28%22sal%22%29%20%0A%20%20%20%20%20%20%20%20%20%20%20Me.txtJob.Text%20%3D%20rdr%28%22job%22%29%20%0A%20%20%20%20%20%20%20%20Else%20%0A%20%20%20%20%20%20%20%20%20%20%20%27display%20message%20if%20no%20rows%20found%20%0A%20%20%20%20%20%20%20%20%20%20%20MessageBox.Show%28%22Not%20found%22%29%20%0A%20%20%20%20%20%20%20%20End%20If%20%0A%20%20%20%20%20%20%20%20%27clear%20up%20the%20resources%20%0A%20%20%20%20%20%20%20%20rdr.Close%28%29%20%0A%20%20%20%20%20%20Catch%20ex%20As%20Exception%20%0A%20%20%20%20%20%20%20%20%20%27display%20if%20any%20error%20occurs%20%0A%20%20%20%20%20%20%20%20%20MessageBox.Show%28%22Error%3A%20%22%20%26amp%3B%20ex.Message%29%20%0A%20%20%20%20%20%20%20%20%20%27close%20the%20connection%20if%20it%20is%20still%20open%20%0A%20%20%20%20%20%20%20%20%20If%20cn.State%20%3D%20ConnectionState.Open%20Then%20%0A%20%20%20%20%20%20%20%20%20%20%20%20cn.Close%28%29%20%0A%20%20%20%20%20%20%20%20%20End%20If%20%0A%20%20%20%20%20%20End%20Try%20%0A%20%20%20End%20Sub%20%0AEnd%20Class
Within the above highlighted code,:empno is the bind variable. We are placing (or assigning) a value into that bind variable using OracleParameter.
If you want to provide a very clear OracleParameter, you can even write something like the following code:
Dim cmd As New OracleCommand("SELECT empno, ename, _ sal, deptno FROM emp WHERE ename=:ename", cn) Dim pEmpno As New OracleParameter With pEmpno .ParameterName = ":ename" .OracleDbType = OracleDbType.Varchar2 .Size = 20 .Value = Me.txtEname.Text End With cmd.Parameters.Add(pEmpno)
Dim%20cmd%20As%20New%20OracleCommand%28%22SELECT%20empno%2C%20ename%2C%20_%20%0A%20%20%20%20%20%20%20%20%20%20sal%2C%20deptno%20FROM%20emp%20WHERE%20ename%3D%3Aename%22%2C%20cn%29%20%0ADim%20pEmpno%20As%20New%20OracleParameter%20%0AWith%20pEmpno%20%0A%20%20%20%20%20.ParameterName%20%3D%20%22%3Aename%22%20%0A%20%20%20%20%20.OracleDbType%20%3D%20OracleDbType.Varchar2%20%0A%20%20%20%20%20.Size%20%3D%2020%20%0A%20%20%20%20%20.Value%20%3D%20Me.txtEname.Text%20%0AEnd%20With%20%0Acmd.Parameters.Add%28pEmpno%29
In the above code fragment, we are working with a bind variable :ename, which is of type VARCHAR2 and size 20. We will deal with OracleParemeter in more detail in subsequent chapters.
Trackback(0)
|