技术开发 频道

Oracle数据库绑定变量特性及应用


4.  绑定变量在应用开发环境下的使用;
4.1 在VB.Net or ASP.NET  and VB中的的使用
建议用Oracleclient DB的连接方法,OleDB不支持;下面是使用

OracleClient连接的使用例子(这个代码执行只需要2秒不到);
Begin
        Dim cn01 As New OracleConnection
        Dim CMD01 As New OracleCommand

        Dim Cmd As New OleDbCommand
        Dim i As Integer
        Try
            <add key="DBCONN_SFCFA"  value="User ID=sfcfa;password=SFCFA;Data Source=CIM;" />
            xConnStr = System.Configuration.ConfigurationSettings.AppSettings("DBCONN_SFCFA"
            'cn01.ConnectionString()
            cn01.ConnectionString = xConnStr
            cn01.Open()

            TextBox1.Text = Now
            Application.DoEvents()

            xSql = "insert into t values(:username,:userid,sysdate) "
            For i = 1 To 1000
                CMD01 = New OracleClient.OracleCommand(xSql, cn01)
                CMD01.CommandType = CommandType.Text
                CMD01.Parameters.Add("username", "test" + CStr(i))
                CMD01.Parameters.Add("userid", i)
                CMD01.ExecuteNonQuery()
                CMD01.Parameters.Clear()
            Next i

            TextBox2.Text = Now

        Catch ex As OleDbException
            MsgBox(ex.Message)
        Catch ex As Exception
            MsgBox(ex.HelpLink + ex.Message)

        End Try
End.

     OleDB(VB,ASP等)不支持绑定变量,或者我没有找到更好的方法去实现它;它有变量的概念但不支持绑定;网络上,有很多帖子说;他实现了绑定变量用VB or ASP;我按照他们的方法去试,发现他们与单纯传参数没有什么区别,请看下面的内容;


OleDB(这个执行需要5秒 :
        Dim xConnStr, xSql As String
        Dim Cn As New OleDbConnection

        Dim cn01 As New OracleConnection
        Dim CMD01 As New OracleCommand

        Dim Cmd As New OleDbCommand
        Dim i As Integer
        Try
           <add key="DBCONN_SFCFA"  value="Provider=MSDAORA.1;User ID=sfcfa;password=SFCFA;Data Source=CIM;"/>
            xConnStr = System.Configuration.ConfigurationSettings.AppSettings("DBCONN_SFCFA"
            'Cn.ConnectionString()
            Cn.ConnectionString = xConnStr
            Cn.Open()

            TextBox1.Text = Now
            Application.DoEvents()

            xSql = "insert into t values(?,?,sysdate) "
            For i = 1 To 1000
                Cmd = New OleDbCommand(xSql, Cn)
                Cmd.CommandType = CommandType.Text
                Cmd.Parameters.Add("username", "test" + CStr(i))
                Cmd.Parameters.Add("userid", i)
                Cmd.ExecuteNonQuery()
                Cmd.Parameters.Clear()
            Next i

            TextBox2.Text = Now

        Catch ex As OleDbException
            MsgBox(ex.Message)
        Catch ex As Exception
            MsgBox(ex.HelpLink + ex.Message)

        End Try
     
  VB or ASP(耗时也是5秒左右…):
  
   Private Sub Command1_Click()
    Dim sConn As String
    Dim BVCS_CN As ADODB.Connection
    'Dim BVCS as ADODB.
    Dim xCMD As ADODB.Command
    Dim xPre As ADODB.Parameter
    Dim xSql As String
    Dim xSql01 As String
    Dim xRS As ADODB.Recordset
   
    On Error GoTo 1

    SetDBConnection = True
    Set BVCS_CN = New ADODB.Connection
   
    'BVCS_CN.Provider = "MSDAORA"
    'sConn = "DATA SOURCE=" & ServerName & ";"
    sConn = "Provider=MSDAORA.1;Password=sfcfa;User ID=sfcfa;Data Source=cim;"
   
    With BVCS_CN
        .Open sConn
    End With

   
    If BVCS_CN.State = 0 Then
       MsgBox "DB Connection is error"
       Exit Sub
    End If
   
    Text1.Text = Now
    DoEvents
   
    Set xCMD = New ADODB.Command
   
    Dim xTest As String
   
   
    Set xPre = New ADODB.Parameter
   
    'BVCS_CN
   
    For i = 1 To 1000

       With xCMD

          .ActiveConnection = BVCS_CN

          .CommandText = " Insert into TT(username,userid) values(?,?) "
          .CommandType = adCmdText
          .Parameters.Append .CreateParameter("username", adBSTR, adParamInput, 30, "test" + CStr(i))
          .Parameters.Append .CreateParameter("userid", adInteger, adParamInput, 4, i)
          .Prepared = True
          .Execute
       End With


       xCMD.Parameters.Delete 1
       xCMD.Parameters.Delete 0
      
    Next i
   

   
    Set xCMD = Nothing
   
    Text2.Text = Now
   
    Exit Sub
1:
    Set xCMD = Nothing

     MsgBox Error$
     For Each objErr In BVCS_CN.Errors
        MsgBox objErr.Description
     Next
     BVCS_CN.Errors.Clear
     Exit Sub
     Resume Next
End Sub

4.2 在Delphi中的使用情况;
这里特殊说明, Borland Delphi 4.0以上的版本已经开始完全支持绑定变量的概念,因此,它执行数据库的查询效率要好于其他开发工具;执行的结果不到2秒;
procedure TForm1.Button1Click(Sender: TObject);
Var
   i :Integer;
begin

  edit1.text:=DatetimeToStr(now);
  For i := 1 to 1000 do
  //Begin
      With Query1 do
      Begin
         close;
         Sql.clear;
         Sql.add('Insert into t Values(:username,:user_id,sysdate) ');
         ParamByName('username').AsString :='test' ;
         ParamByName('user_id').AsInteger :=i ;
         execSql;
      End;
  //end;

  //edit2.text:=DateToStr(now);
    edit2.text:=DatetimetoStr(now);
end;  

4.3. 在Java中的使用绑定变量

String v_id = 'xxxxx';
String v_sql = 'select name from table_a where id = ? '; //嵌入绑定变量
stmt = con.prepareStatement( v_sql );
stmt.setString(1, v_id ); //为绑定变量赋值
stmt.executeQuery();
在Java中,结合使用setXXX 系列方法,可以为不同数据类型的绑定变量进行赋值,从而大大优化了SQL 语句的性能。

4.4  C#同VB.NET ,这里不在赘述;
0
相关文章