2012-03-06 16 views
0

我試圖建立一個OLEDB連接建立連接,但由於我從來沒有使用它,我真的不知道我在做什麼錯。我設法在web.config文件中獲得一個連接,我想,但現在我得到'必須聲明標量變量'錯誤。我以爲我宣佈了它,但它一定是錯的。從來沒有使用OLEDB,標量變量錯誤

Private Function GetBackUpAccountName(ByVal BAccount As String, ByRef Name As String) As Boolean 
    'sql statement for baccount information in case BAccount is not found, search here next 
    Dim backupsql As String = "select * from brokermaster bl WHERE BAccount = @BAccount" 
    Using conn As New OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings("BackUpConnectionString").ConnectionString) 
     Using cmd As New OleDbCommand(backupsql, conn) 
      cmd.Parameters.AddWithValue("@BAccount", BAccount) 
      conn.Open() 
      Using backuprdr As OleDbDataReader = cmd.ExecuteReader 
       If (backuprdr.Read) Then 
        Name = backuprdr("Name").ToString() 
        Return True 
       Else 
        Return False 
       End If 
      End Using 
      conn.Close() 
     End Using 
    End Using 
End Function 

<add name="BackUpConnectionString" 
    connectionString="Provider=SQLOLEDB;Data Source=*******;Initial Catalog=DeskA;Persist Security Info=True;User ID=******;Password=******" 
    providerName="System.Data.OleDb"/> 

此函數是我在頁面上爲SQL連接提供的另一個函數的副本。我必須爲客戶獲取帳戶信息,如果他們沒有在該數據庫中找到,我需要在顯示錯誤之前爲他們搜索不同的數據庫。這是可行的功能。它現在已經工作了好幾個月,今天要求我們在錯誤彈出之前搜索另一個數據庫,說他們的帳戶沒有找到。

Private Function GetAccountName(ByVal BAccount As String, ByRef FirstName As String, ByRef LastName As String) As Boolean 
    'sql statement for baccount information 
    Dim sql As String = "SELECT BAccount, First_Name, Last_Name FROM IB inner join IB_BUISNESS_INFORMATION ON (IB.IB_ID = IB_BUISNESS_INFORMATION.IB_ID) WHERE BAccount = @BAccount" 
    Using conn As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("IBConnectionString").ConnectionString) 
     Using cmd As New SqlCommand(sql, conn) 
      cmd.Parameters.AddWithValue("@BAccount", BAccount) 
      conn.Open() 
      Using rdr As SqlDataReader = cmd.ExecuteReader 
       If (rdr.Read) Then 
        FirstName = rdr("First_Name").ToString() 
        LastName = rdr("Last_Name").ToString() 
        Return True 
       Else 
        Return False 
       End If 
      End Using 
      conn.Close() 
     End Using 
    End Using 
End Function 
+3

您應該使用SqlClient而不是OleDb;它更快。 – SLaks 2012-03-06 19:56:12

+0

我不確定你的意思。我以前從未使用過這個功能,因此我只是在嘗試進行Google搜索時嘗試做一些工作。 :/ – jlg 2012-03-06 20:03:06

+0

基本上,用'SqlClient'替換每個出現的'OleDb'並使用直接的SQL Server連接字符串。現在,您正在瀏覽較慢的OLE DB包裝器。 – SLaks 2012-03-06 20:04:52

回答

0

OleDB使用位置參數。這樣做...

Dim backupsql As String = "select * from brokermaster bl WHERE BAccount = ?" 

並且在公共帖子中發佈您的連接字符串的數據源值是有風險的業務。

+0

哦,哎呀!我有一種感覺,我忘記了一些東西。這只是添加了語法錯誤,所以我用@BAccount替換了它們,並且這次它工作。它顯示錯誤的名稱,但在調試模式下,它顯示正在拖動正確的名稱。 – jlg 2012-03-06 21:44:18