c# – 使用带有参数的命令时临时表的“无效对象名称”

c# – 使用带有参数的命令时临时表的“无效对象名称”,第1张

概述我正在创建一个临时表,并使用相同的命令和连接使用两个单独的语句进行填充.但是,如果我创建了在创建之前插入参数的表,我将收到一个“无效的对象名称”.如果我在创建后添加它,它可以正常工作. 临时表应该持续整个会话,所以当参数添加到命令对象时,我看不到什么重要. 失败: using (SqlConnection conn = new SqlConnection("Data Source=.;Initia 我正在创建一个临时表,并使用相同的命令和连接使用两个单独的语句进行填充.但是,如果我创建了在创建之前插入参数的表,我将收到一个“无效的对象名称”.如果我在创建后添加它,它可以正常工作.

临时表应该持续整个会话,所以当参数添加到命令对象时,我看不到什么重要.

失败:

using (sqlConnection conn = new sqlConnection("Data Source=.;Initial Catalog=TEST;Integrated Security=True;"))        using (sqlCommand cmd = conn.CreateCommand())        {            conn.open();            cmd.Parameters.Add(new sqlParameter("@ID",1234));            cmd.CommandText = "CREATE table #Test (ID INT NOT NulL PRIMARY KEY,I INT NOT NulL)";            cmd.ExecuteNonquery();            cmd.CommandText = "INSERT INTO #Test VALUES (@ID,1)";            cmd.ExecuteNonquery();            ..... more code that uses the table        }

作品:

using (sqlConnection conn = new sqlConnection("Data Source=.;Initial Catalog=TEST;Integrated Security=True;"))        using (sqlCommand cmd = conn.CreateCommand())        {            conn.open();            cmd.CommandText = "CREATE table #Test (ID INT NOT NulL PRIMARY KEY,I INT NOT NulL)";            cmd.ExecuteNonquery();            cmd.Parameters.Add(new sqlParameter("@ID",1234));            cmd.CommandText = "INSERT INTO #Test VALUES (@ID,1)";            cmd.ExecuteNonquery();            ..... more code that uses the table        }

编辑:

sql Profiler对此做了更多的介绍.

如果命令有任何参数,底层代码将发出一个“exec sp_executesql”.如果参数被清除,底层代码会发出更直接的“CREATE table”. Temp表在sp_executesql之后被清理,这说明了我在这里看到的内容.

对我来说,这将是sqlCommand(或相关)代码中的一个错误,但是由于我现在有一个解释,我可以继续下去.

解决方法 事实上在“exec sp_executesql”语句中的问题.当ADO检测到有sqlCommand中声明的参数时,默认使用“sp_executesql”而不是“exec”.但是在这种情况下,第一个命令是创建一个TEMPORAL表,而且已知的时间表仅在存储过程(sp_executesql)中有效,并在退出时被删除.因此,第二个INSERT语句在第一个示例代码中不再有效.在第二个中,时间表被成功创建,并且insert语句被正常执行.希望它有帮助. 总结

以上是内存溢出为你收集整理的c# – 使用带有参数的命令时临时表的“无效对象名称”全部内容,希望文章能够帮你解决c# – 使用带有参数的命令时临时表的“无效对象名称”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存