存在國外的依賴出於測試目的截斷表我有需要SqlConnection
或連接字符串和字符串的方法。該方法檢查SqlConnection
或DbContext.Database.Connection.ConnectionString
針對一組「危險」的字符串,如果在連接字符串有任何「危險」的字符串,它不執行其查詢。如何當通過C#
基本上,我需要知道如何執行(通過C#)一截斷/刪除表中的所有數據。然而問題是外國的依賴。我正在嘗試以下方法。刪除所有依賴項,刪除表,然後恢復所有依賴項,但是我遇到了問題,我恢復了所有依賴項代碼。我怎樣才能通過C#做到這一點?
應該刪除該表主要方法。
public int DeleteFromDatabase(SqlConnection sqlConnection, string tableName)
{
int success = 0;
string sqlTrunc = "Delete from " + tableName;
if (isSafeSqlConnection(sqlConnection))
{
DropAllConstraints();
using (sqlConnection)
{
SqlCommand cmd = new SqlCommand(sqlTrunc, sqlConnection);
sqlConnection.Open();
success = cmd.ExecuteNonQuery();
sqlConnection.Close();
}
ReinstateAllConstraints(); //<=error happens here.
}
return success;
}
這滴所有約束:
這就驗證了傳入的連接不是活的服務器:
private bool isSafeSqlConnection(SqlConnection connection)
{
string pathToUNsafeStrings = @"Utility\UnsafeStrings\UnsafeStrings.txt";
string[] unsafeStrings = File.ReadAllLines(pathToUNsafeStrings);
foreach (var item in unsafeStrings)
{
if (connection.ConnectionString.Contains(item))
return false;
}
return true;
}
該方法主要執行的每個條目從該查詢返回:
select
'ALTER TABLE dbo.' + object_name(fk.parent_object_id) +
' ADD CONSTRAINT ' + fk.name +
' FOREIGN KEY(' + c1.name + ') REFERENCES dbo.' +
object_name(fk.referenced_object_id) + '(' + c2.name + ')' as col1
from
sys.foreign_keys fk
inner join
sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
inner join
sys.columns c1 ON fkc.parent_column_id = c1.column_id and c1.object_id = fkc.parent_object_id
inner join
sys.columns c2 ON fkc.referenced_column_id = c2.column_id and c2.object_id = fkc.referenced_object_id
public void ReinstateAllConstraints()
{
string[] reinstateAllConstraints = File.ReadAllLines(@"Utility\UnsafeStrings\reisntateconstraint.txt");
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
foreach (var item in reinstateAllConstraints)
{
var command = new SqlCommand(item, connection);
command.ExecuteNonQuery();
}
connection.Close();
}
}
您刪除的依賴關係,或者你不截斷在別處引用的記錄。不知道這裏有什麼問題。 – Will
@Will我如何確保一旦刪除了依賴關係,所有的依賴關係都會被恢復? –
如果記錄X取決於記錄Y,那麼您只能刪除X和Y或將它們留下。你不能刪除Y並離開X. – Will