gpt4 book ai didi

c# - 如何删除一个表

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:12 24 4
gpt4 key购买 nike

我正在使用以下 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 被删除...

我哪里错了?

最佳答案

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

  • 避免使用查询文本对此类操作进行编码,否则您很可能会遇到安全问题。最好创建 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;
}

关于c# - 如何删除一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28360076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com