13 messaggi dal 19 febbraio 2013
Buongiorno a tutti,

sono un neofita di asp in quando normalmente programmoin vb.net e probabilmente farò una domanda banale, ma non ho trovato risposta sui manuali.
Ho esplicitato in una classe che ho derivato dalla classe Page il valore di connectione string:

Public Class SmartSessionPage
Inherits System.Web.UI.Page

Private Const sConnectionString As String = "Data Source=SURFACE-BOB;Initial Catalog=OS_00001_001;User ID=****;Password=********"
Private Const sConnectionProviderName As String = "System.Data.SqlClient"

Public Property CString As String
Get
If IsNothing(Session("ConnectionString")) Then
Return sConnectionString
Else
Return CType(Session("ConnectionString"), String)
End If
End Get
Set(value As String)
Session("ConnectionString") = value
End Set
End Property

Public Property CProvider As String
Get
If IsNothing(Session("ConnectionProviderName")) Then
Return sConnectionProviderName
Else
Return CType(Session("ConnectionProviderName"), String)
End If
End Get
Set(value As String)
Session("ConnectionProviderName") = value
End Set
End Property


End Class



Da questa classe faccio derivare tutte le mie pagine aspx. Come posso fare per recuperare il valore di CString direttamente nella pagina aspx, anzichè nel code behind, per assegnarlo alla proprietà di un sqldatasource?

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString=" ??????? "

Grazie in anticipo per l'aiuto
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
anziché inserire la connection strng nel code behind, prova a metterla nel web.config. C'è una specifica sezione <connectionStrings>:

<connectionStrings>
  <add name="myConnectionString" connectionString="Data Source=SURFACE-BOB;Initial Catalog=OS_00001_001;User ID=****;Password=********" providerName="System.Data.SqlClient" />
</connectionStrings>


A questo punto sarà facile richiamarla dal tuo SqlDataSource.
<asp:SqlDataSource
          id="SqlDataSource1"
          runat="server"
          ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
          SelectCommand="...">
      </asp:SqlDataSource>


Ne trovi un esempio nella documentazione:
https://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.sqldatasource.connectionstring(v=vs.110).aspx

ciao,
Moreno

Enjoy learning and just keep making
13 messaggi dal 19 febbraio 2013
Ciao Moreno,

grazie della risposta.
Il problema sta proprio nel fatto che ho bisogno di modificare la connection string dinamicamente in funzione dell'ultente che si autentica, per cui non posso impostarla come statica nel web.config. L'idea era in effetti quella di impostarla come proprietà nella classe da cui far derivare le pagine, in modo da averla disponibile in esse. Il meccanismo funziona, soltanto che non so a questo punto come richiamare il valore della proprietà dalla pagina aspx...
3.939 messaggi dal 28 gennaio 2003
nel controllo SqlDataSource, nella proprietà ConnectionString, ho messo:

ConnectionString="<%# StringaConnessione %>"

dove StringaConnessione è un property o function protected o public della pagina.
Per funzionare, funziona. Ma ti assicuro che non l'ho mai utilizzato e mai l'utilizzerò.

Io seguirei il consiglio dato prima da BrightSoul, ossia, stringhe di connessione cablate nel web.config ma richiamate con una classe globale con metodi statici.
13 messaggi dal 19 febbraio 2013
Ciao Pietro,

grazie anche a te della risposta. Premetto che a me il seguente codice non funziona:





<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Customer.aspx.vb" Inherits="OS.Customer"
Theme="OS" MasterPageFile="../../Site.Master" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<script type="text/VB" runat="server">
Protected Function GetCString() As String
Return "Data Source=SURFACE-BOB;Initial Catalog=OS_00001_001;Persist Security Info=True;User ID=*****;Password=*****"
End Function

</script>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%# GetCString %>"
</asp:SqlDataSource>
</asp:Content>


e mi da il seguente errore:

"La proprietà ConnectionString non è stata inizializzata."

Chiaramente ho già provato con il metodo statitico ConnectionString="<%$ ConnectionStrings:OS_conn %>" e in questo caso tutto funziona a dovere.






Prendo atto della tua perplessità in merito al meccanismo che cerco di mettere in piedi per spiegarne le motivazioni, perchè probabilmente qualcuno ha già affrontato il problema. Sto creando un'interfaccia per un'applicazione multiaziendale, che deve connettersi a database diversi in funzione dell'account aziendale con cui l'utente si autentica. Pertando la ConnectionString varia in funzione dell'utente. Per semplificare:

ID Azienda: 00001
User: Pippo
ConnectionString: "Data Source=SURFACE-BOB;Initial Catalog=OS_00001_001;Persist Security Info=True;User ID=*****;Password=*****"

ID Azienda: 00002
User: Pippo
ConnectionString: "Data Source=SURFACE-BOB;Initial Catalog=OS_00002_001;Persist Security Info=True;User ID=*****;Password=*****"

ID Azienda: 00003
User: Pippo
ConnectionString: "Data Source=SURFACE-BOB;Initial Catalog=OS_00003_001;Persist Security Info=True;User ID=*****;Password=*****"


IO avevo pensato il metodo di cui sopra, che pare avere qualche problema. Qualcuno conosce un metodo già sperimentato per ottenere quello che mi serve?

Grazie in anticipo a tutti.

Roberto
3.939 messaggi dal 28 gennaio 2003
anche se non lo userò mai, il codice di sotto mi funziona

pagina
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <link href="../App_Themes/classico10/StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%#GetCString() %>" SelectCommand="SELECT * FROM REGIONI" ProviderName="Oracle.DataAccess.Client"></asp:SqlDataSource>

        <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
        </asp:GridView>
    </div>
    </form>
</body>
</html>


codice
Partial Class prove_a
    Inherits System.Web.UI.Page



    Protected Function GetCString() As String
        Return gl.StringaConnessioneORA_PIETRO
    End Function

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Me.DataBind()
    End Sub
End Class

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.