加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:43:18 所属栏目:百科 来源:网络整理
导读:我正在创建一个临时表,并使用相同的命令和连接使用两个单独的语句进行填充.但是,如果我创建了在创建之前插入参数的表,我将收到一个“无效的对象名称”.如果我在创建后添加它,它可以正常工作. 临时表应该持续整个会话,所以当参数添加到命令对象时,我看不到什
我正在创建一个临时表,并使用相同的命令和连接使用两个单独的语句进行填充.但是,如果我创建了在创建之前插入参数的表,我将收到一个“无效的对象名称”.如果我在创建后添加它,它可以正常工作.

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

失败:

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语句被正常执行.希望它有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读