如何删除表

时间:2015-02-06 06:47:44

标签: c# sql-server-2008

我正在使用以下C#方法执行SQL次查询:

public bool ExecuteQuery(String pQuery)
{
    SqlConnection con = new SqlConnection("MyConnectionString");
    con.Open();

    SqlTransaction trans = con.BeginTransaction(IsolationLevel.ReadCommitted);

    try
    {
        SqlCommand cmd = new SqlCommand(pQuery, con, trans);
        cmd.ExecuteNonQuery();
        trans.Commit();
        con.Close();
        trans.Dispose();
        return true;
    }
    catch (Exception exp)
    {
        trans.Rollback();
        con.Close();
        MessageBox.Show(exp.Message, "Error!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

    return false;
}

当我通过这个声明时:

ExecuteQuery("DROP TABLE MyTable");

然后该方法返回true,这意味着它工作正常,但是当我检查SQL Server时,myTable没有被删除。如果我在SQL Server Management Studio中运行相同的语句,则会删除MyTable ...

我哪里错了?

1 个答案:

答案 0 :(得分:4)

在回答你的问题之前,有一些评论:

  • 避免使用查询文本对此类操作进行编码,这很可能会导致安全问题。更好地创建executes table drop

    的存储过程
    create procedure sp_DropTable
    @tablename varchar(200)
    as
    BEGIN
        DECLARE @SQL VARCHAR(MAX);
        SET @SQL = 'IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N''' + @tableName + ''') AND type = (N''U'')) DROP TABLE [' + @tableName + ']'
    
        EXEC (@SQL);
       END
    GO
    

然后将存储过程的名称作为参数传递给您的函数。现在回到你的错误。

表删除不是transaction,但您尝试在事务模式中执行它。这使它失败了。尝试:

public bool ExecuteQuery(String pQuery)
{
    SqlConnection con = new SqlConnection("MyConnectionString");
    con.Open();

    try
    {
        SqlCommand cmd = new SqlCommand(pQuery, con);

        // if you pass just query text
        cmd.CommandType = CommandType.Text;

        // if you pass stored procedure name
        // cmd.CommandType = CommandType.StoredProcedure;   

        cmd.ExecuteNonQuery();

        con.Close();

        return true;
    }
    catch (Exception exp)
    {
        con.Close();
        MessageBox.Show(exp.Message, "Error!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

    return false;
}