2012-03-06 10 views
0

OLEDB接続の接続を確立しようとしていますが、使用していないので実際に何が間違っているのか分かりません。私はweb.configファイルで接続を取得できたと思いますが、今は 'must declare scalar variable'エラーが発生します。私はそれを宣言したと思ったが、間違っていなければならない。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

OleDbの代わりにSqlClientを使用する必要があります。それはより速いです。 – SLaks

+0

私はあなたが何を意味するか分かりません。私は以前これを使ったことがないので、私はGoogleの検索を行ったときに何かを働かせようとしました。 :/ – jlg

+0

基本的に、 'OleDb'のすべての出現を' SqlClient'で置き換え、直接SQL Serverの接続文字列を使用します。今は、OLE DBラッパーを使用していますが、これは遅いです。 – SLaks

答えて

0

OleDBは、位置パラメータを使用します。これを行う...

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

パブリックポストに接続文字列のデータソース値を投稿することは危険です。

+0

Oh whoops!私は何かを忘れていたと感じました。 ?sは構文エラーを追加したので、@ BAccountに置き換えました。間違った名前を表示していますが、デバッグモードでは正しい名前がプルされていることを示しています。 – jlg

関連する問題