有人知道在通过OSQL执行命令时Server 2005的行为与使用SQlConnection的编程查询之间有什么细微的区别吗?
我有一个客户端,它的数据库位于远程计算机上,可以使用OSQL与其进行交互。但是,当我通过构建sqlconnection/ the命令尝试类似的查询时,我会收到以下错误:
[“在建立到Server的连接时发生了与网络相关的或特定于实例的错误。无法找到或无法访问服务器。请验证实例名称是否正确,以及server是否配置为允许远程连接(提供者: SQL网络接口,错误: 26错误定位服务器/实例特定)。
下面是工作的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();
}在这两种情况下,我都是作为同一个用户运行(即:我以windows用户身份登录,我要么打开一个cmd窗口并执行OSQL命令,要么启动一个包含上面代码片段的windows应用程序。OSQL将工作,代码片段将生成上面的错误。这两种情况都使用“sa”帐户访问数据库。OSQL片段将提示用户输入密码。
这两种行为之间有什么区别吗?我不认为这是由于连接数量的问题,因为我可以自由地在执行osql命令(这将工作)和运行应用程序(这会生成错误消息)之间切换。
谢谢你的想法。
-john
发布于 2011-06-13 19:19:18
首先,不要使用TempDB,其名称是tempdb,您的代码将中断一个区分大小写的实例。
对于连接问题,请按照SQL网络接口,错误: 26 -指定服务器/实例时出错中的步骤操作。OSQL使用ODBC和SQLCommand有一个内置的托管SNI实现,因此它们之间存在差异,并且它们受不同的机器全局配置设置的影响。按照链接文章中的步骤确定连接断开的位置。
发布于 2011-06-14 18:28:42
事实证明,这两种机制没有区别。启动应用程序的方式略有不同;这种差异(特别是生成查询之前的名称解析)导致了错误消息。
从这个角度来看,osql/sqlcmd和编程查询之间没有内在的区别。
https://stackoverflow.com/questions/6333726
复制相似问题