venerdì 20 giugno 2008

Sostituzione stringhe in campi Text o nText

Problema: Come posso fare per sostituire una stringa con un'altra in un campo di tipo Text o nText?

Considerazioni: Se il campo fosse di tipo varchar o nvarchar il problema non si porrebbe, in quanto esiste in SqlServer una funzione (più in generale esiste in T-Sql) che lo fa in modo nativo: la funzione "Replace". Funzione che, però, non lavora sui campi text. Bisogna utilizzare un'altra funzione, che però ha un utilizzo più generico: UpdateText

Soluzione:
declare @TestoVecchio varchar(1000)
set @TestoVecchio = 'Vecchio'

declare curs cursor local fast_forward
for
select
    idriga,
    textptr(Colonna),
    charindex(@TestoVecchio, Colonna)-1
from
    Tabella
where
    Colonna
like
    '%' + @TestoVecchio +'%'


declare @Testonuovo varchar(1000)
set @Testonuovo = 'nuovo'

declare @txtlen int
set @txtlen = len(@TestoVecchio)


declare @ptr binary(16)
declare @pos int
declare @id int


open curs

fetch next from curs into @id, @ptr, @pos

while @@fetch_status = 0
begin
    updatetext Tabella.Colonna @ptr @pos @txtlen @Testonuovo

    fetch next from curs into @id, @ptr, @pos
end

close curs
deallocate curs

Note:
Tabella è la tabella di riferimento
Colonna è il campo in cui si deve modificare il testo
idriga è l'id della tabella (in questo caso è di tipo int, quindi la variabile @id è impostata come int, se fosse di tipo diverso basta cambiare la dichiarazione della variabile @id nel tipo corretto)

martedì 10 giugno 2008

Stringhe di connessione a Database per Web.Config

Database Access
<connectionstrings>
  <add name="AccessConnectionString"
   connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
   Data Source=|DataDirectory|nomedb.mdb"
   providerName="System.Data.OleDb" />
</connectionstrings>


Database ODBC
<connectionstrings>
  <add name="ODBCConnectionString"
   connectionString="DSN=nomedsn;Uid=sa;Pwd=pwd;
   providerName="System.Data.Odbc” />
</connectionstrings>


Database SQLServer
<connectionstrings>
  <add name="OLEDBConnectionString"
   connectionString="Server=nomeserver;Integrated Security=SSPI;Database=nomedb;"
   providerName="System.Data.SqlClient" />
</connectionstrings>


Connessione ad Excel
<connectionstrings>
  <add name="OLEDBConnectionString"
   connectionString="Provider=Microsoft.Jet.OLEDB.4.0;
   Data Source= nomefile.xls; Extended Properties=Excel 8.0;"; />
</connectionstrings>


Connessione a file .csv
<connectionstrings>
  <add name="OLEDBConnectionString"
   connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=nomefile.csv;
   ExtendedProperties=""Text;HDR=Yes;FMT=Delimited""";/>
</connectionstrings>



Inoltre si possono utilizzare le connessioni native verso Oracle.

mercoledì 4 giugno 2008

Ajax - Response.Write in un UpdatePanel

Normalmente l’uso del Response.Write() in un UpdatePanel non è consentito.
Per ovviare a questo problema, uno stratagemma è quello di inserire un LinkButton esterno all’UpdatePanel e associare a questo controllo il postback generato dall’oggetto interno al pannello.


HTML
<asp:UpdatePanel ID="upd" runat="server">
    …
    <asp:Button runat="server" ID="BOTTONE" Text="Clicca" />
    …
    </asp:UpdatePanel>
<asp:LinkButton ID="ALinkButton" runat="server"></asp:LinkButton>



CODICE
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    …
    AddHandler Me.ALinkButton.Click, AddressOf FUNZIONE
    Me.BOTTONE.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(Me.ALinkButton, ""))

    If Not Page.IsPostBack Then
        …
    End If
    …
End Sub

Protected Sub FUNZIONE(ByVal sender As Object, ByVal e As System.EventArgs)
    …
    Response.Write("Testo")
    …
End Sub