Op het moment ben ik een architectuur aan het bedenken voor een nieuw project, waar ik een nieuwe zelfverzonnen databasetechniek aan het implementeren ben. Ik wil namelijk een systeem maken waarmee klanten zelf eigen MDF databases kunnen aanmaken, die ik opsla in een database. Wat ik dus wil doen is een .MDF database opslaan in een MSSQL database. De masterdatabase zou dan een tabel hebben met de volgende kolommen:
- ID (PK, int)
- Name (NVARCHAR(150) NOT NULL)
- MDFDatabase (VARBINARY(MAX))
Het opslaan van nieuwe MDF databases in de masterdatabase heb ik nu werkend. Dit ziet er ongeveer zo uit (waarbij ChildDatabaseTemplate.mdf een lege database is):
Voor het ophalen heb ik nu de volgende code:
Mijn vraag is nu als volgt: Hoe kan deze .MDF databases weer ophalen uit de masterdatabase en hier queries op uitvoeren? Eerlijk gezegd heb ik zelf nog geen idee hoe ik dit moet aanpakken. Ik sta open voor jullie ideeën en suggesties.
- ID (PK, int)
- Name (NVARCHAR(150) NOT NULL)
- MDFDatabase (VARBINARY(MAX))
Het opslaan van nieuwe MDF databases in de masterdatabase heb ik nu werkend. Dit ziet er ongeveer zo uit (waarbij ChildDatabaseTemplate.mdf een lege database is):
C#:
1
2
3
4
5
6
7
8
9
10
11
| private void AddNewChildDatabase(string name) { // Load the child database template into a bytearray string pathToChildDatabaseTemplate = HttpContext.Current.Server.MapPath("~/App_Data/ChildDatabaseTemplate.mdf"); byte[] bytearray = System.IO.File.ReadAllBytes(pathToChildDatabaseTemplate); // Insert it into the childdatabase table SqlCommand insertChildDatabaseCommand = new SqlCommand("INSERT INTO ChildDatabase (Name, ChildDatabaseData) VALUES (@name, @db)"); insertChildDatabaseCommand.Parameters.Add("@name", SqlDbType.NVarChar).Value = name; insertChildDatabaseCommand.Parameters.Add("@db", SqlDbType.VarBinary).Value = bytearray; this.ExecuteSqlCommand(insertChildDatabaseCommand); } |
Voor het ophalen heb ik nu de volgende code:
C#:
1
2
3
4
5
| private DataTable GetChildDatabase(int id) { SqlCommand insertChildDatabaseCommand = new SqlCommand("SELECT * FROM ChildDatabase WHERE ID = @id"); insertChildDatabaseCommand.Parameters.Add("@id", SqlDbType.Int).Value = id; return this.ExecuteSqlCommand(insertChildDatabaseCommand); } |
Mijn vraag is nu als volgt: Hoe kan deze .MDF databases weer ophalen uit de masterdatabase en hier queries op uitvoeren? Eerlijk gezegd heb ik zelf nog geen idee hoe ik dit moet aanpakken. Ik sta open voor jullie ideeën en suggesties.