Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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# 数据库异常中已存在对象_C#_Mysql_Sqlbulkcopy - Fatal编程技术网

C# 数据库异常中已存在对象

C# 数据库异常中已存在对象,c#,mysql,sqlbulkcopy,C#,Mysql,Sqlbulkcopy,我的代码有什么问题。。。我尝试了几件事,但一次又一次地犯同样的错误 有什么帮助吗?? 代码是: SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[SubDomainName].ToString()); conn.Open(); string temptable = "CREATE TABLE [dbo].[Tmptablenew]([TicketID] [int] NULL,[TicketD

我的代码有什么问题。。。我尝试了几件事,但一次又一次地犯同样的错误

有什么帮助吗?? 代码是:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[SubDomainName].ToString());
conn.Open();
string temptable = "CREATE TABLE [dbo].[Tmptablenew]([TicketID] [int] NULL,[TicketDescription][varchar](max) NULL,[TicketAssignedTo] [varchar](100) NULL,[TicketCreatedDate] [datetime] NULL,[TicketStatus][varchar](50),CRMConnectionID [int] NULL,[TicketUpdatedDate] [Datetime] NULL,img [varchar](500) NULL)";
SqlCommand cmd = new SqlCommand(temptable, conn);
cmd.ExecuteNonQuery();
SqlCommand cmmd = new SqlCommand("select * from Tickets", conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmmd);
DataTable dt1 = new DataTable("dt1");
adapter.Fill(dt1);
cmmd.ExecuteNonQuery();

//BulkCopy the data in the DataTable to the temp table
using (SqlBulkCopy bulk = new SqlBulkCopy(conn))
{
    bulk.DestinationTableName = "Tmptablenew";
    bulk.WriteToServer(result);
    conn.Close();
}
conn.Open();
string mergeSql = "merge into Tickets as Target " +
                     "using Tmptablenew as Source " +
                     "on " +
                     "Target.TicketID= Source.TicketID " +
                     "and Target.CRMConnectionID = Source.CRMConnectionID " +
                     "when not matched then " +
                     "insert (TicketID,TicketDescription,TicketAssignedTo,TicketCreatedDate,TicketStatus,CRMConnectionID,TicketUpdatedDate,img) values (Source.TicketID,Source.TicketDescription,Source.TicketAssignedTo,Source.TicketCreatedDate,Source.TicketStatus,Source.CRMConnectionID,Source.TicketUpdatedDate,Source.img);";

string mergesql1 = "Update Tickets SET TicketDescription=S.TicketDescription, TicketAssignedTo = S.TicketAssignedTo, TicketStatus = S.TicketStatus,TicketUpdatedDate = S.TicketUpdatedDate,img = S.img FROM Tickets t JOIN Tmptablenew AS S ON t.TicketID = S.TicketID and T.CRMConnectionID = S.CRMConnectionID";
cmd.CommandText = mergeSql;
cmd.ExecuteNonQuery();
cmmd.CommandText = mergesql1;
cmmd.ExecuteNonQuery();
cmd.CommandText = "drop table Tmptablenew";
cmd.ExecuteNonQuery();
//Clean up the temp table
conn.Close();

您正在创建表
Tmptablenew
,该表似乎已存在于数据库中

我认为,您正在尝试创建一个临时表,在本例中,为MySQL创建一个
create temporary table
,或为MS SQL使用table name
#Tmptablenew
。同样,在这种情况下,当会话关闭时,它将自动删除

编辑


因此,如果您使用的是MySQL(根据您问题的标签),您必须更改
string-tentrable=“创建临时表[dbo].[Tmptablenew]([TicketID]…
)等等。或者如果它是MS-SQL(我怀疑),那么
string-tentrable=“创建表[dbo]。#Tmptablenew]([TicketID]…
)等等(在这种情况下,您应该在代码中的任何地方将其命名为
#Tmptablenew

对代码做一些处理并描述问题,请说明错误是什么?在哪一行?我们需要更多详细信息。显然,“数据库中已经有一个对象”。您无法创建与已存在的对象同名的对象。因此,要么删除已存在的对象,要么不要尝试创建新对象。获取您的内联SQL并在SQL management studio中使用值执行它-我猜您的合并事务可能有问题。我还将将其移动到存储的进程。其他e是唯一一行尝试创建任何内容的代码,这是第三行。
Tmptablenew
已经存在。我的SQL不太流利,但谷歌会帮你在这里加载来学习如何创建它。我尝试了你的代码,现在我得到了以下异常,错误是System.InvalidOperationException:无法访问目标表的Tmptablenew'.-->System.Data.SqlClient.SqlException:无效的对象名“Tmptablenew”。@user3226735让我们澄清一下。您是在使用问题标签上所说的mysql还是mssql?那么,如果是MS Sql,您是否已将代码中出现的所有
Tmptablenew
更改为
\Tmptablenew
,以及SqlBulk的
DestinationTableName
也复制。我正在使用MSSql,我尝试使用#tmptablenew,但我得到了我在上一条评论中提到的异常。@user3226735修改了您的代码并发现了另一个问题。您不应该在
bulk.WriteToServer(结果)之后关闭连接;
然后再次打开它,因为临时表只有在创建它的连接打开时才可见。