webForumDet fria alternativet

installationssida

.NET

4 svar · 702 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#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)

Medlem sedan jan. 2008280 inlägg
#2

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?

Medlem sedan jan. 20023 327 inlägg
#3

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;
    }
Medlem sedan aug. 20003 575 inlägg
#4

Klart du kan testa om anslutningen som fungerar.
Gör ungefär som du gjort i ditt kodexempel.

Medlem sedan sep. 2005833 inlägg
#5

tusen tack för hjälpen (y)

260 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)