2011-06-13 3 views
0

Кто-нибудь знает о любых тонких различиях между поведением SQL Server 2005 при выполнении команды через OSQL и программным запросом с использованием SQlConnection?Поведенческие различия SQLServer 2005 при использовании osql и sqlcommand

У меня есть клиент с базой данных на удаленной машине, с которой я могу использовать OSQL для взаимодействия. Однако, когда я пытаюсь выполнить подобный запрос, создав sqlconnection/sqlcommand; Я получаю сообщение об ошибке:

['A network-related or instance-specific error occurred while establishing a connection to the SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that the SQL Server is configured to allow remote connections (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specific).

Вот команда, которая работает OSQL:

osql -S myHost\SQLEXPRESS -U sa -q "USE [TempDB] select [Endpoint] from [Service]" 

Это не работает, выше генерируется ошибка.

SqlConnectionStringBuilder cnBldr = new SqlConnectionStringBuilder(); 

cnBldr.UserID = "sa"; 
cnBldr.Password = "PASSWORD"; 
cnBldr.DataSource = "myHost\\SQLEXPRESS"; 
cnBldr.InitialCatalog = "TempDB"; 
using (SqlConnection cn = new SqlConnection(cnBldr.ConnectionString)) 

using (SqlCommand cmd = new SqlCommand("select [Endpoint] from [Service]",cn)) 
{ 
    cn.Open(); 
    SqlDataReader rdr = cmd.ExecuteReader(); 
    rdr.Read(); 
} 

В обоих случаях, я бегу, как тот же пользователь (то есть: я войти как пользователь окна, и я либо открыть CMD окно и выполнить команду OSQL или я запустить приложение окна, которое содержит код фрагмент выше. OSQL будет работать, фрагмент кода генерирует указанную выше ошибку. В обоих случаях используется учетная запись «sa» для доступа к базе данных. Фрагмент OSQL предложит пользователю ввести пароль.

Есть ли разница между которые могут быть связаны с этим поведением? Я не считаю, что это связано с проблемой с количеством подключений, поскольку я могу свободно переключаться между выполнением команды osql (которая будет работать) и запуском приложения (который генерирует сообщение об ошибке).

Спасибо за любые мысли.

-John

+0

Используется один и тот же аппарат? – gbn

ответ

2

Первый не использовать TempDB, имя tempdb и ваш код будет перерыв на чувствительную например случай.

Для обеспечения возможности подключения выполните следующие действия: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified. OSQL использует ODBC, а SQLCommand имеет встроенную управляемую реализацию SNI, поэтому между ними существуют различия, и они зависят от разных параметров глобальной конфигурации компьютера. Следуйте инструкциям в связанной статье, чтобы определить, где происходит разрыв соединения.

+0

Привет, Да, я работал на одной машине в обеих базах. TempDB был просто аннотацией, чтобы удалить имя реальной базы данных. Извините за путаницу; Я бы назвал его fooDB. –

+0

Кроме того, такое же поведение наблюдается, если я использую больше sqlcmd (против osql) (то есть: sqlcmd -S myHost \ SQLExpress -U sa -q "USE [tempDB] выберите [Конечная точка] из [Службы]" также будет производить нужный вывод. –

+0

При попытке приложения подключить результат к ошибке, добавленной на сервер ERRORLOG? Проверьте либо файл, либо используйте EventVwr.exe –

0

Как оказалось, нет разницы между двумя механизмами. Приложение запускалось несколько иначе; и это различие (в частности, разрешение имен до генерируемого запроса) привело к появлению сообщения об ошибке.

С этой точки зрения нет никаких неотъемлемых отличий между osql/sqlcmd и программным запросом.

Смежные вопросы