2017-08-10 66 views
2

我试图将数据插入表使用此代码:错误上插入表

try 
{ 
    conn.ConnectionString = "connection_string"; 
    conn.Open(); 

    using (SqlCommand command = new SqlCommand("CREATE TABLE UXZona(IDZona int,Morada char(50));", conn)) 
     command.ExecuteNonQuery(); 
    SqlCommand insertCommand = new SqlCommand("INSERT INTO UXZona(FirstColumn, SecondColumn) VALUES (@0, @1)", conn); 

} 
catch (Exception) 
{ 
    SqlCommand cmd = new SqlCommand("create table UXZona(IDZona int NOT NULL, Morada varchar(50) NOT NULL);", conn); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    Console.WriteLine("Tabela criada com sucesso"); 
} 

我启动该程序没有任何问题,但它停止调试,并给了我此错误消息:

“已经有一个名为‘UXZona’数据库中的对象”

它跳过try{}并直接进入catch{}。任何线索我做错了什么?如果需要,请随时索取更多代码。

+0

连接字符串错误 –

+0

它不会*跳过* try块,它会执行它直到尝试创建表的命令抛出异常,然后**它会跳到catch块。如果这不是你想要做的,你为什么要这样写代码?如果它不存在,你应该只能创建表。 –

+0

创建表格应该在设计时完成,而不是在运行时完成。这是你的第一个错误。 –

回答

6

的问题是在这里:

SqlCommand command = new SqlCommand("CREATE TABLE UXZona(IDZona int,Morada char(50));", conn) 

您应该检查是否对象已存在:

SqlCommand command = new SqlCommand("IF OBJECT_ID('UXZona', 'U') IS NULL CREATE TABLE UXZona(IDZona int,Morada char(50));", conn) 

我还要重新考虑你在运行时创建数据库对象的方法。它需要DDL特权,并可能导致安全问题。

+0

代码中的“OBJECT_ID”是什么意思 –

+2

OBJECT_ID是一个SQL函数,它返回模式范围对象的数据库对象标识号。 –

+0

@DennisLarisch谢谢 –