Я зіткнувся з такою ж помилкою під час використання об’єктів управління сервером (SMO) на vb.net (я впевнений, що це однаково в C #)
Коментар Течі Джо до початкового повідомлення був корисним попередженням про те, що в спільному хостингу відбувається багато додаткових речей. На це знадобилося небагато часу, але наведений нижче код показує, як потрібно бути дуже конкретним у способі доступу до баз даних SQL. Помилка "головний сервер ..." виявляється, коли виклики SMO не були точно визначеними в середовищі спільного хостингу.
Цей перший розділ коду був проти локального сервера SQL Express і спирався на просту аутентифікацію Windows. Весь код, використаний у цих зразках, ґрунтується на навчальному посібнику з SMO Роберта Канаша у цій статті веб-сайту Code Project :
Dim conn2 = New ServerConnection()
conn2.ServerInstance = "<local pc name>\SQLEXPRESS"
Try
Dim testConnection As New Server(conn2)
Debug.WriteLine("Server: " + testConnection.Name)
Debug.WriteLine("Edition: " + testConnection.Information.Edition)
Debug.WriteLine(" ")
For Each db2 As Database In testConnection.Databases
Debug.Write(db2.Name & " - ")
For Each fg As FileGroup In db2.FileGroups
Debug.Write(fg.Name & " - ")
For Each df As DataFile In fg.Files
Debug.WriteLine(df.Name + " - " + df.FileName)
Next
Next
Next
conn2.Disconnect()
Catch err As Exception
Debug.WriteLine(err.Message)
End Try
У наведеному вище коді файли .mdf для кожної бази даних на локальному сервері SQLEXPRESS є прекрасними, оскільки автентифікацією керує Windows, і вона є широкою для всіх баз даних.
У наступному коді є два розділи, що повторюють файли .mdf. У цьому випадку працює лише перша ітерація, яка шукає групу файлів, і вона знаходить лише один файл, оскільки з'єднання полягає лише в одній базі даних у спільному хостинг-середовищі.
Друга ітерація, яка є копією ітерації, яка працювала вище, негайно задавлюється, оскільки способом її написання намагається отримати доступ до 1-ї бази даних у спільному середовищі, яка не є тією, до якої застосовуються ідентифікатор користувача / пароль, сервер SQL повертає помилку авторизації у вигляді помилки "головний сервер ...".
Dim sqlConnection1 As New System.Data.SqlClient.SqlConnection
sqlConnection1.ConnectionString = "connection string with User ID/Password to a specific database in a shared hosting system. This string will likely also include the Data Source and Initial Catalog parameters"
Dim conn1 As New ServerConnection(sqlConnection1)
Try
Dim testConnection As New Server(conn1)
Debug.WriteLine("Server: " + testConnection.Name)
Debug.WriteLine("Edition: " + testConnection.Information.Edition)
Debug.WriteLine(" ")
Dim db2 = testConnection.Databases("the name of the database to which the User ID/Password in the connection string applies")
For Each fg As FileGroup In db2.FileGroups
Debug.Write(fg.Name & " - ")
For Each df As DataFile In fg.Files
Debug.WriteLine(df.Name + " - " + df.FileName)
Next
Next
For Each db3 As Database In testConnection.Databases
Debug.Write(db3.Name & " - ")
For Each fg As FileGroup In db3.FileGroups
Debug.Write(fg.Name & " - ")
For Each df As DataFile In fg.Files
Debug.WriteLine(df.Name + " - " + df.FileName)
Next
Next
Next
conn1.Disconnect()
Catch err As Exception
Debug.WriteLine(err.Message)
End Try
У цьому другому циклі ітерації код складається добре, але оскільки SMO не був налаштований на точний доступ до правильної бази даних з точним синтаксисом, ця спроба не вдається.
Оскільки я тільки навчаюсь SMO, я подумав, що інші новачки можуть оцінити знання того, що існує і більш просте пояснення цієї помилки - ми просто її неправильно зашифрували.