Member 11318400 Ответов: 0

Как я могу подключиться к двум разным серверам в зависимости от параметра.


I created an application in VB-2012 that connects to two servers and executes stored procedures depending on what button is clicked on the UI.
I created both of my connections as follows;

Public Class xxx
 Dim cServer As String = "Server1"
 Dim cConnStr As String = "Server=SQL1;database=mast1;User ID=ts;Password=xxxx"
 Dim conn As New SqlConnection(cConnStr)
 Dim sqlCmd As SqlCommand = conn.CreateCommand

 Dim cConStrIT2 As String = "Server=SQL2;database=mast2;User ID=ts;Password=xxxx"
 Dim conIT2 As New SqlConnection(cConStrIT2)
 Dim sqlcmdIT2 As SqlCommand = conIT2.CreateCommand

'****** Execute SProc from server 1
Private Sub btnErr32_Click(sender As System.Object, e As System.EventArgs) Handles btnErr32.Click
  sqlCmd = New SqlCommand("sp_EDI_INLOAD_ERROR0032 @batchid, @membID", conn)
  sqlCmd.Parameters.Add("@batchid", SqlDbType.NVarChar).Value = cBatchid
  sqlCmd.Parameters.Add("@membID", SqlDbType.NChar).Value = cMembIDPaidClm
  ExecuteSQL(nWhatMessage)  'execute the command'
End Sub

'****** Execute SProc from server 2
Private Sub btnPost(sender As System.Object, e As System.EventArgs) Handles 
            btnPost.Click
 sqlcmdIT2 = New SqlCommand("exec sp_EDI_INLOAD_PROF_IT3 @batchid", conIT2)
 sqlcmdIT2.Parameters.Add("@batchid", SqlDbType.NVarChar).Value = cBatchid
 ExecuteSQLIT3(7)
End Sub

Private Sub ExecuteSQL(nMessage As Integer)
    conn.Open()
    dr = sqlCmd.ExecuteReader
    conn.Close()
End Sub

Private Sub ExecuteSQLIT3(nMessage As Integer)
    conIT2.Open()
    dr = sqlcmdIT2.ExecuteReader
    conIT2.Close()
End Sub

End Class
This code works fine.
An enhancement to the application.
The first connection to a server can be one of two servers (1 or 3), depending on the parameter that will be passed.
The second connection will remain as is. 
I made the following changes listed below.
I capture the parameter and i process the correct connections string but when the code gets to the ExecuteSQL subs, i get a few different error messages. Below is what i tried to do.


Что я уже пробовал:

Public Class xxx
  Dim cConnStr As String
  Dim cServer As String
  Dim cWhatServer As String() = Environment.GetCommandLineArgs()
  Dim sqlCmd As SqlCommand
  Dim conn As New SqlConnection()

Private sub TS_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  cWhatServer = Environment.GetCommandLineArgs()

  If cWhatServer.Length > 1 Then
       cServer = cWhatServer(1) "SRV1"
  Else
       cServer = "SRV3"
  End If

  If cServer = "SRV1" Then
     cConnStr = "Server=SQL1;database=mast1;User ID=ts;Password=xxxx"
  Else
     cConnStr = "Server=sQL3;database=mast3;User ID=ts;Password=xxxx"
  End If

  conn = New SqlConnection(cConnStr)
  sqlCmd = conn.CreateCommand
End Sub

'****** Execute SProc from server 1 or Server 3
Private Sub btnErr32_Click(sender As System.Object, e As System.EventArgs) Handles btnErr32.Click
  sqlCmd = New SqlCommand("sp_EDI_INLOAD_ERROR0032 @batchid, @membID", conn)
  sqlCmd.Parameters.Add("@batchid", SqlDbType.NVarChar).Value = cBatchid
  sqlCmd.Parameters.Add("@membID", SqlDbType.NChar).Value = cMembIDPaidClm
  ExecuteSQL(nWhatMessage)  'execute the command'
End Sub

'****** Execute SProc from server 2
Private Sub btnPost(sender As System.Object, e As System.EventArgs) Handles 
            btnPost.Click
 sqlcmdIT2 = New SqlCommand("exec sp_EDI_INLOAD_PROF_IT3 @batchid", conIT2)
 sqlcmdIT2.Parameters.Add("@batchid", SqlDbType.NVarChar).Value = cBatchid
 ExecuteSQLIT3(7)
End Sub

Private Sub ExecuteSQL(nMessage As Integer)
    conn.Open()
    dr = sqlCmd.ExecuteReader
    conn.Close()
End Sub

Private Sub ExecuteSQLIT3(nMessage As Integer)
    conIT2.Open()
    dr = sqlcmdIT2.ExecuteReader
    conIT2.Close()
End Sub

End Class

David_Wimbley

"Я захватываю параметр и обрабатываю правильную строку соединений, но когда код попадает в субподряд ExecuteSQL, я получаю несколько различных сообщений об ошибках. Ниже приводится то, что я пытался сделать."

И какие сообщения об ошибках вы получили? Мы не можем воспроизвести ваши ошибки, не имея доступа к вашим серверам, так что это не так уж много.

Member 11318400

Привет Дэвид,
сообщение об ошибке, которое продолжает отображаться, является
"Не удалось найти хранимую процедуру 'sp_EDI_INLOAD_ERROR0032'."
И это происходит, когда я пытаюсь выполнить dr = sqlcmd.Команда ExecuteReader.
Также обратите внимание, что когда я добавлял свой код на эту страницу, Я забыл включить
Дим ДР в качестве объекта sqldatareader. Этот тусклый оператор действительно существует в моем коде.
Спасибо за Ваш быстрый ответ.

0 Ответов