Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用osql和sqlcommand时SQLServer2005的行为差异_Sql Server_Sql Server 2005_Osql - Fatal编程技术网

Sql server 使用osql和sqlcommand时SQLServer2005的行为差异

Sql server 使用osql和sqlcommand时SQLServer2005的行为差异,sql-server,sql-server-2005,osql,Sql Server,Sql Server 2005,Osql,有人知道SQL Server 2005在通过OSQL执行命令时的行为与使用SQlConnection执行编程查询时的行为有什么细微差别吗 我有一个客户端,在远程机器上有一个数据库,我可以使用OSQL与之交互。但是,当我试图通过构建sqlconnection/sqlcommand进行类似的查询时;我收到错误消息: ['建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器 找不到或无法访问。请验证实例名称是否正确,以及SQL Server是否配置为允许远程连接(提供程序:SQL

有人知道SQL Server 2005在通过OSQL执行命令时的行为与使用SQlConnection执行编程查询时的行为有什么细微差别吗

我有一个客户端,在远程机器上有一个数据库,我可以使用OSQL与之交互。但是,当我试图通过构建sqlconnection/sqlcommand进行类似的查询时;我收到错误消息:

['建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器 找不到或无法访问。请验证实例名称是否正确,以及SQL 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

首先不要使用
TempDB
,名称是
TempDB
,您的代码将在区分大小写的实例上中断


对于连接问题,请遵循中的步骤。OSQL使用ODBC,SQLCommand具有内置的托管SNI实现,因此它们之间存在差异,并且受不同的计算机全局配置设置的约束。按照链接文章中的步骤确定连接断开的位置。

这两种机制之间没有区别。启动应用程序的方式略有不同;而这种差异(特别是在生成查询之前的名称解析)正是导致错误消息的原因


从这个角度来看,osql/sqlcmd和编程查询之间没有本质上的区别。

Hi,是的,我在两个数据库的同一台机器上运行。TempDB只是一个注释,用于删除真实数据库的名称。很抱歉造成混淆;我应该将其称为fooDB。此外,如果我使用更多的sqlcmd(vs.osql)(即:sqlcmd-S myHost\SQLExpress-U sa-q“使用[tempDB]从[Service]选择[Endpoint]”也将生成正确的输出。您的应用程序尝试连接是否会导致错误添加到服务器错误日志中?请检查该文件,或使用EventVwr.exe