Nu hamnar väl detta i kategorin "Vansinniga nybörjar-.net-frågor som får mig att framstå som ett totalt jackass", men skit samma. Jag har en connectionstring med en databassökväg i mina application settings, som ett autogenererat DataSet använder sig av. Okej, har kollat runt lite nu, och det är ju faktiskt rätt självklart att app.config inte går att ändra. Problemet är att mitt DataSet är kopplat till ConnectionStringen. Jag ser då följande alternativ: Att det inte går att ändra under körning känns inte så konstigt, appsettings ska ju kräva adminbehörighet, och admin körs väl ändå inte programmet som? Ett alternativ är att skriva om inställningen för connection att inte vara readOnly. <b>>Att det inte går att ändra under körning känns inte så konstigt, appsettings ska ju kräva adminbehörighet, och admin körs väl ändå inte programmet som?</b> Jag brukar ha de settings som ändras i en speciell config fil. Men hur kopplar man då den ConnectionStringen till en autogenererad DataSet? Som jag tolkar det så vill du kunna ändra vid ett tillfälle och det är just vid installationen. Rätt uppfattat, fast då kan jag väl inte använda ClickOnce? Eftersom det löste sig i [Köra .net-program på nätverk], så kommer jag nog inte behöva detta... Vad man kan konstatera är att "strongly typed dataset" + clickonce inte gör det speciellt lätt att byta databassökväg (arbeta på utv. och föra över i prod., t.ex.).Ändra applicationsettings under körning?
Nu skulle jag vilja kunna ändra den dynamiskt. Problemet är att om den är av Application-typ så är den readonly, och jag vill ju inte ha den som user, den ska ju ändras globalt för alla. Var tänker jag fel?
Ska jag lägga det som någon annan typ av setting?
Alltså: applikationsglobala settings som går att ändra under körning?Sv: Ändra applicationsettings under körning?
1. Lägga till en extra connectionstring/user. Löjligt att ha olika för olika användare, men skit samma. Oavsett så måste jag koppla datasetet till denna andra connectionstringen.
2. Manuellt ändra connectionstringen på datasetet, till någon usersetting, om detta på ngt sätt skulle vara enklare än att göra det designtime.
3. Manuellt redigera app.config från ett separat "adminprogram"?
Det känns ju rätt vansinnigt om det inte finns ett snyggare sätt att flytta en databas från utv. till prod.-miljö?Sv:Ändra applicationsettings under körning?
Hur som haver, kan du inte ha det som ett steg i deploy, att ändra connectionstring? Borde kunna skriva ett litet utilityprogram som ändrar det efter kompilering eller liknandeSv: Ändra applicationsettings under körning?
Visa alla filer i projektet, öppna mappen 'My Project', öppna Settings.settings noden, öppna sedan filen Settings.Designer.vb och leta reda på den property som mappar mot ConnectionsString.
ta bort ReadOnly och lägg till
Set(ByBal value As String)
Me("ConnectionStringName") = value
End Set
sen kan du ändra genom
My.Settings.ConnectionStringName = "Nytt värde"
i din kod. (glöm ej My.Settings.Save)
Denna Designer.vb fil autogenereras dock när du tex lägger till en ny settings via projektets properties och sparar detta. Du kommer då att få ett kompilerings fel som säger att ConnectionStringName är readOnly och då får du göra om ovanstående steg.
Annars skulle jag nog gå med annat program som editerar settingsfilen utifrån.
Sv: Ändra applicationsettings under körning?
Ja, det var ju det jag skrev, "inte så konstigt". =)
Sen är det så att det i mitt fall kommer ha fulla skrivrättigheter, och då hade det varit bra mycket smidigare...
<b>>Borde kunna skriva ett litet utilityprogram som ändrar det efter kompilering eller liknande</b>
Men jag vet ju det inte förrän vid installationen hos kund...
<b>>Denna Designer.vb fil autogenereras dock när du tex lägger till en ny settings via projektets properties och sparar detta.</b>
Mmm, och om jag ska in och ändra de grejerna manuellt så känns det som att jag lika gärna kunde gå in och ändra själva settingen på plats. Eftersom det sker enstaka gånger kanske det är enklare... Det är ju trots allt XML...Sv: Ändra applicationsettings under körning?
Sen använder jag serialization för att läsa och skriva den. Nåt i den här stilen (I C# men du förstår nog principen)
// Partial för då kan jag lägga till settings i den fil/modul där jag använder dem
public partial class MySettings {
public string ConnectionString;
};
public static class AppSettings {
public static MySettings Settings;
public static AppSettings() { // Load settings file
XmlSerializer serializer = new XmlSerializer(MySettings);
using (StreamReader sr = new StreamReader(settingsFilename)) {
Settings = serializer.Deserialize(sr) as MySettings;
}
}
public static void SaveSettings() {
XmlSerializer serializer = new XmlSerializer(MySettings);
using (StreamWriter sw = new StreamWriter(settingsFilename))
serializer.Serialize(sw, Settings);
}
}Sv:Ändra applicationsettings under körning?
Såvitt jag kan förstå så är det hårt inskriven i .xsd-filen, och då måste jag ändå ändra i klasserna som genereras från datasetet?Sv:Ändra applicationsettings under körning?
Titta på denna artikel för att se hur du kan få in det vid installationen
http://www.codeguru.com/columns/vb/article.php/c14377__1/ (flera sidor)Sv: Ändra applicationsettings under körning?
Och isf känns det enklare att bara gå in och redigera xml-filen...Sv:Ändra applicationsettings under körning?
Tack för alla förslag, dock.