V Vinnaren Medlem sedan sep. 2005 833 inlägg Frågan 3 juli 2008 19:01 #1 Försöker få till en enkel installationssida där man får ange anslutningsinfo till databasen, men hur sparar man den infon sen i web.configen?
har följande:
protected void btnDatabas_Click(object sender, EventArgs e)
{
try
{
string address = txtAddress.Text;
string databas = txtDatabasName.Text;
string username = txtDatabasUserName.Text;
string password = txtDatabasPassword.Text;
}
catch (Exception ex)
{
}
}
Går det även att prova anslutningen till databasen så den är OK innan man sparar den i web.configen?
Tacksam för all hjälp (y)
Det låter inte så vackert att ändra på web.config via kod. Men det går nog:
http://forums.asp.net/p/918285/1047588.aspx
Tänk på att applikationen startar om när web.config ändras.
Prova anslutningen är väl enkelt? Bara skapa ett connection-objekt med parametrarna och testa om du får ett exception kastat i ansiktet?
Compusa Medlem sedan jan. 2002 3 327 inlägg Använd WebConfigurationManger för det här och blanda inte massa krånglig inläsning/redigering av XML-datan.
Så här kan du göra för att ändra i web.config under run-time:
1. Se till att ha sektionen "connectionStrings" i din web.config fil:
<connectionStrings>
<add name="ConnectionString" connectionString="standardvärde..."/>
</connectionStrings>
2. Lägg till en referens till dll:en System.Configuration i ditt projekt om du inte redan har det.
3. Lägg till följande i din kod:
using System.Configuration;
...
// Denna skulle du också kunna spara i din Web.config
private const string ConnectionStringPattern =
"Server={0};Database={1};Integrated Security=false;User Id={2};Password={3}";
...
protected void btnDatabas_Click(object sender, EventArgs e)
{
try
{
string address = txtAddress.Text;
string databas = txtDatabasName.Text;
string username = txtDatabasUserName.Text;
string password = txtDatabasPassword.Text;
// null som parameter innebär att man hämtar root-configfilen
Configuration configuration = WebConfigurationManager.OpenWebConfiguration(null);
ConnectionStringsSection connectionSection = configuration.ConnectionStrings;
ConnectionStringSettings connectionSettings = connectionSection.ConnectionStrings[0];
// formatera strängen med hjälp av mönstret och variablernas värden
connectionSettings.ConnectionString = string.Format(ConnectionStringPattern,
address, databas, username, password);
// Testa anslutningen och spara bara om den fungerar
if (CanConnect(connectionSettings.ConnectionString))
{
connectionSection.SectionInformation.ForceSave = true;
configuration.Save();
}
}
catch (Exception ex)
{
}
}
private bool CanConnect(string connectionString)
{
bool canConnect = false;
SqlConnection connection = null;
try
{
connection = new SqlConnection(connectionString);
connection.Open();
canConnect = true;
}
catch (SqlException exc)
{
// Anslutningen fungerade inte!
}
finally
{
if (connection != null)
connection.Close();
}
return canConnect;
}
Klart du kan testa om anslutningen som fungerar.
Gör ungefär som du gjort i ditt kodexempel.
V Vinnaren Medlem sedan sep. 2005 833 inlägg tusen tack för hjälpen (y)