私はデータベースをc#で別のデータベースにコピーします。データベースのコピー後にテーブルを更新できません
すべては大丈夫です。私は行を挿入しようとすると、
はしかし、私はこのエラーを取得する:
System.Data.SqlClient.SqlException:INSERT権限はオブジェクト・データベース・スキーマ「DBO」で拒否されました。
これは、データベースをコピーするには、私のC#のコードです:
public bool CreateDataBase(string dbName)
{
//var connstring = "data source=.;initial catalog=InformedWorker;integrated security=True;";
var connstring = "Server=localhost;Integrated security=SSPI;database=master";
var localhost = "localhost";
try
{
Server server = new Server(localhost);
Microsoft.SqlServer.Management.Smo.Database sourceDatabase = server.Databases["InformedWorkerTemplate"];
Microsoft.SqlServer.Management.Smo.Database newDatbase = new Microsoft.SqlServer.Management.Smo.Database(server, dbName);
var clientDBPath = ConfigurationManager.AppSettings["ClientData"];
newDatbase.FileGroups.Add(new FileGroup(newDatbase, "PRIMARY"));
DataFile dtPrimary = new DataFile(newDatbase.FileGroups["PRIMARY"], "PriValue", clientDBPath + "\\" + dbName + ".mdf");
dtPrimary.Size = 77.0 * 1024.0;
dtPrimary.GrowthType = FileGrowthType.KB;
dtPrimary.Growth = 1.0 * 1024.0;
newDatbase.FileGroups["PRIMARY"].Files.Add(dtPrimary);
LogFile logFile = new LogFile(newDatbase, "Log", clientDBPath + "\\" + dbName + ".ldf");
logFile.Size = 7.0 * 1024.0;
logFile.GrowthType = FileGrowthType.Percent;
logFile.Growth = 10.0;
newDatbase.LogFiles.Add(logFile);
newDatbase.Create();
Transfer transfer = new Transfer(sourceDatabase);
transfer.CopySchema = true;
transfer.CopyData = true;
transfer.Options.DriAllKeys = true;
transfer.CopyAllObjects = true;
transfer.CopyAllViews = true;
transfer.CopyAllDatabaseTriggers = true;
transfer.CopyAllDefaults = true;
transfer.CopyAllFullTextCatalogs = true;
transfer.CopyAllFullTextStopLists = true;
transfer.CopyAllPartitionFunctions = true;
transfer.CopyAllPartitionSchemes = true;
transfer.CopyAllPlanGuides = true;
transfer.CopyAllRoles = true;
transfer.CopyAllRules = true;
transfer.CopyAllSchemas = true;
transfer.CopyAllSearchPropertyLists = true;
transfer.CopyAllSequences = true;
transfer.CopyAllSqlAssemblies = true;
transfer.CopyAllStoredProcedures = true;
transfer.CopyAllSynonyms = true;
transfer.CopyAllTables = true;
transfer.CopyAllUserDefinedAggregates = true;
transfer.CopyAllUserDefinedDataTypes = true;
transfer.CopyAllUserDefinedFunctions = true;
transfer.CopyAllUserDefinedTableTypes = true;
transfer.CopyAllUserDefinedTypes = true;
transfer.CopyAllUsers = true;
transfer.CopyAllViews = true;
transfer.CopyAllXmlSchemaCollections = true;
transfer.CopyAllObjects = true;
transfer.Options.WithDependencies = true;
transfer.DestinationDatabase = newDatbase.Name;
transfer.CopySchema = true;
transfer.CopyData = true;
transfer.Options.DriAllKeys = true;
StringCollection transferScript = transfer.ScriptTransfer();
using (SqlConnection conn = new SqlConnection(connstring))
{
conn.Open();
using (SqlCommand switchDatabase = new SqlCommand("USE [" + newDatbase.Name + "]", conn))
{
switchDatabase.ExecuteNonQuery();
}
foreach (string scriptLine in transferScript)
{
using (SqlCommand scriptCmd = new SqlCommand(scriptLine, conn))//, transaction))
{
int res = scriptCmd.ExecuteNonQuery();
}
}
}
return true;
}
catch (Exception ex)
{
logging.AddError(ex.ToString());
}
return false;
}
これは、行を追加するために自分のサーバー/ APIコードです(私は、私はデータベースを変更Enitity枠組みに自分のDBを結合した)
public void Exchange()
{
try
{
var query = admin.Subscriptions.Where(d => d.CompanyRef == "56f55e3e-deac-4cde-ae4b-83671363a54e").FirstOrDefault();
if (query != null)
{
o.Database.Connection.Open();
o.Database.Connection.ChangeDatabase(query.DatabaseName);
o.Customers.Add(new Customer()
{
CompanyName = "CompanyName",
CompanyRef = "CompanyRef",
CustomerRef = "CustomerRef",
DOE = DateTime.Now,
Email = "Email",
FName = "FName",
MobileNo = "MobileNo",
Salutation = "Salutation",
ServerRef = "ServerRef",
ServerTS = DateTime.Now,
SName = "SName",
TelephoneNo = "TelephoneNo",
Active = true
});
o.SaveChanges();
}
}
catch (Exception ex)
{
logging.AddError(ex.ToString());
}
}
私はDBからDBにすべてをコピーするので、他に何ができるのかわかりません。
あなたは別のサーバー – TheGameiswar
にそれを復元する@TheGameiswarこんにちは。いいえ、自分のローカルサーバーにすべてではありません –
コピーは、DBと同じ役割と特権を取得するのと同じと仮定しました。このようなコマンドはDBAが最善の方法で処理し、カプセル化する必要があるため、C#の使用は避けてください。 –