Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
C# SqlCommandBuilder使用什么连接生成查询?_C#_.net_Sql_Database Connection - Fatal编程技术网

C# SqlCommandBuilder使用什么连接生成查询?

C# SqlCommandBuilder使用什么连接生成查询?,c#,.net,sql,database-connection,C#,.net,Sql,Database Connection,我这样问是因为当我从我的SqlCommandBuilder使用GetUpdateCommand()或GetInsertCommand()时,生成的SqlCommand设置了连接成员,但处于关闭状态。我想知道它使用了什么连接,因为我在这个对象中没有看到任何连接成员,而且SqlCommandBuilder.DataAdapter.SelectCommand中的连接是打开的(Update/Delete/InsertCommand属性为null) 在运行GetUpdateCommand()或GetIns

我这样问是因为当我从我的
SqlCommandBuilder
使用
GetUpdateCommand()
GetInsertCommand()
时,生成的SqlCommand设置了连接成员,但处于关闭状态。我想知道它使用了什么连接,因为我在这个对象中没有看到任何连接成员,而且
SqlCommandBuilder.DataAdapter.SelectCommand
中的连接是打开的(Update/Delete/InsertCommand属性为null)

在运行
GetUpdateCommand()
GetInsertCommand()之前,我应该在哪里检查连接的状态?或者我应该打开他们的内部连接吗


顺便说一句,我在SQL Server 2008中使用.Net 4。

SqlCommandBuilder
上调用
GetXXXCommand
时,它将在
DataAdapter
上的连接集上内部创建一个新命令(
DataAdapter.SelectCommand.connection.CreateCommand()
)。这意味着构建器创建的所有命令的连接都应该相同,并且打开/关闭状态也应该相同


确定状态在
SqlCommandBuilder.DataAdapter.SelectCommand.Connection
上打开,而不是在
SqlCommandBuilder.GetInsertCommand().Connection上打开的代码是什么样子的

AFAIK它正在使用
SqlCommandBuilder.DataAdapter.SelectCommand
的连接来创建新命令,但是它仅在您第一次尝试访问该命令时完成。第一次尝试后,命令实例将被保留,并且只重新生成其命令文本。

您确定它需要连接吗?它有(需要)SELECTYes中的元数据,我确定,因为当我执行使用此方法生成的命令时,我会收到一个异常(“ExecuteOnQuery需要一个打开且可用的连接。连接的当前状态为closed”)。调用GetUpdateCommand()后,我只是在调试器中查看它。正如问题注释中所解释的,我在对生成的命令运行ExecuteOnQuery()时调试错误时意识到了这一点。在这一点上,我不会隐式信任调试器,而是进行一些真正的代码测试。。。或者在对其执行任何操作之前确保连接已打开。就性能而言,我认为最好使用已打开的连接,而不是打开已关闭的连接。是的,它的真正调用ie GetInsertCommand多次将导致在以前返回的SqlCommand实例上更改命令文本。但这仍然意味着最终生成的命令将使用来自SqlCommandBuilder.DataAdapter.SelectCommandOk的连接,但这并不能解释连接的不同状态。无论如何,我通过重新设置命令的连接绕过了这个问题,到目前为止,这似乎是可行的。