截断表C#找不到表-不存在或没有权限

时间:2018-08-21 15:54:09

标签: c# sql-server database

我将使用我的完整表名,因为我试图查明为什么找不到该表的原因。

我正在尝试截断C#中的表。我能够在SQL Server中运行此命令"TRUNCATE TABLE NS_Vendor",它可以正确找到并截断该表。

如果我尝试在C#应用程序中执行此操作,则会被告知不存在或没有权限。我正在使用数据库管理员帐户,因此无法获得权限。我正在使用下面的代码。我在具有管理员用户凭据的名为Public的数据库中,并且正在寻找截断"NS_Vendor"表的方法。下面的cmd在SQL Server中有效。我尝试了其他类型的字符串,例如"dbo.NS_Vendor",但没有一个起作用。

有人介意向我指出我对自己做错的事情不了解吗?

SqlConnection sqlConnection = new SqlConnection("Server = server; Database = Public; User = ; Password = ;");
            string query = "TRUNCATE TABLE " + "NS_Vendor";
            SqlCommand cmd = new SqlCommand(query, sqlConnection);
            sqlConnection.Open();
            cmd.ExecuteNonQuery();
            sqlConnection.Close();

1 个答案:

答案 0 :(得分:1)

要解决此问题,我建议您做几件事。首先尝试一下:

string query = "DELETE NS_Vendor";
...
cmd.ExecuteNonQuery();

如果仍然出现类似错误,那么我认为您正在与其他数据库进行交互。但是,如果没有错误,则可以确保您提供的用户没有TRUNCATE

所需的权限

您可以在TRUNCATE TABLE上获得一些有用的信息here,它表示

  

所需的最低权限为table_name的ALTER。默认情况下,表所有者,sysadmin固定服务器角色的成员以及db_owner和db_ddladmin固定数据库角色的TRUNCATE TABLE权限是不可转让的。但是,您可以将TRUNCATE TABLE语句合并到模块(例如存储过程)中,并使用EXECUTE AS子句为模块授予适当的权限。