venerdì 24 luglio 2015

Branch on Git

Per scaricare in locale un branch remoto:

git fetch origin branchName
git checkout branchName


Per fare Merge dal master al branch attuale:

git pull
git merge origin master

mercoledì 25 giugno 2014

Creare viste Materializzate in Oracle

Grazie a queste viste è possibile effettuare salvataggi sulle tabelle mostrando direttamente la struttura tramite una vista.
E' fondamentale però che all'interno della vista non vi siano Join, e che le tabelle a cui fa riferimento abbiano una Identity Key.

CREATE MATERIALIZED VIEW TestMaterializedView FOR UPDATE AS 
SELECT ID_GRUPPO, CODICE, TIPO 
FROM Tabella

mercoledì 18 giugno 2014

Compilare viste in MVC

E' possibile abilitare la compilazione delle viste in MVC come descritto in:

in poche parole, nel file di progetto dobbiamo settare questa chiave di configurazione:

 ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  
    true

mercoledì 4 giugno 2014

Effettuare salvataggio su DB con NHibernate durante l'elaborazione




UnitOfWork.CurrentSessionCommitAndRestartTransaction()
sessione = UnitOfWork.GetCurrentSession()

giovedì 20 marzo 2014

Funzione per ricercare un valore testuale specifico in un DataBase

--diabilito output conteggio righe
use database
Set NoCount On

--stringa da cercare ed altre variabili
Declare @strToFind varchar(max) = 'StringaDaCercare'
Declare @stringSchema sysname = ''
Declare @stringTab sysname = ''
Declare @stringListaCampi varchar(Max) = ''
Declare @stringListaCampiDove varchar(Max) = ''
Declare @stringSQL varchar(max) = ''

--elenco tabelle e campi
Declare @Tabs table(
TABLE_SCHEMA sysname
,TABLE_NAME sysname
)

Insert into @Tabs
Select Distinct TABLE_SCHEMA,TABLE_NAME from INFORMATION_SCHEMA.COLUMNS
Where DATA_TYPE in ('char','nchar','varchar','nvarchar')
Order by TABLE_SCHEMA,TABLE_NAME

--ciclo le righe
While 1=1
Begin

         Set @stringListaCampi = ''
         Set @stringListaCampiDove = ''

         Select Top 1 @stringSchema = TABLE_SCHEMA, @stringTab=TABLE_NAME from
@Tabs
         Order by TABLE_SCHEMA,TABLE_NAME;

         --esco su rowcount 0
         IF @@ROWCOUNT=0
         Break;

         --formatto la stringa per la ricerca
         With Fields
         AS
                 (
                 Select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
                 Where DATA_TYPE in ('char','nchar','varchar','nvarchar','text','ntext')
                 And TABLE_SCHEMA = @stringSchema
                 And TABLE_NAME = @stringTab
                 )

         Select @stringListaCampi = @stringListaCampi + '' +
QUOTENAME(COLUMN_NAME) + ' AS ' + QUOTENAME(COLUMN_NAME) + ',',
         @stringListaCampiDove = @stringListaCampiDove + QUOTENAME(COLUMN_NAME) +
' Like ''%' + @strToFind + '%'' OR '
         From Fields


         Set @stringSQL = 'Select ''' + QUOTENAME(@stringSchema) + ''' As
Table_Schema,''' +    QUOTENAME(@stringTab) + ''' As Table_Name, ' +
Substring(@stringListaCampi,0,LEN(@stringListaCampi))
         + ' from ' + QUOTENAME(@stringSchema) + '.' + QUOTENAME(@stringTab)
         + ' Where ' +
Substring(@stringListaCampiDove,0,LEN(@stringListaCampiDove)-2)

         --eseguo SQL
         Exec(@stringSQL)

         -- elimino la riga dalla tabella temporanea
         Delete From @Tabs
         Where TABLE_SCHEMA = @stringSchema
         And TABLE_NAME = @stringTab

end

lunedì 10 febbraio 2014

Visualizzare la GAC come File System

Per visualizzare la GAC come file system (e eventualmente bypassare eventuali problemi di abilitazione alla scrittura), settare la chiave

DisableCacheViewer = 1 

di tipo: REG_DWORD

in

HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Fusion

martedì 4 febbraio 2014

Aprire un Popup da un GridViewCommandColumnCustomButton

Creare il bottone e inserirlo nella colonna,


Dim customE As New GridViewCommandColumnCustomButton
customE.ID = "Nota"
customE.Text = "Aggiungi Nota"
customE.Image.Url = "../imgs/Note.gif"
col.CustomButtons.Add(customE)

gvDocumenti.Columns.Insert(0, col)

e aggiungere il CustomBottonClick gestito per visualizzare il popup.


gvDocumenti.ClientSideEvents.CustomButtonClick = String.Format("function(s, e) {{ if(e.buttonID = 'Sconta') {0}.Show(); }}", "pcSconta")

giovedì 9 gennaio 2014

Popolare un oggetto via Reflection

Per popolare un oggetto (nel suo costruttore) via Reflection utilizzare questo codice:


        public Oggetto(Oggetto obj)
        {
            var fromFields = typeof(Oggetto).GetProperties();
            foreach (var pi in fromFields)
            {
                pi.SetValue(this, pi.GetValue(obj, null), null);
            }
        } 

lunedì 16 settembre 2013

.dll Oracle 64 o 32 bit?

Se necessario per capire che dll abbiamo passato o in generale per capire se dll è 64 bit o 32 bit basta copiarsela sulla propria macchina, lanciare cmd di Visual Studio e fare:
DUMPBIN /headers Oracle.DataAccess.dll

se è 32 bit riceviamo una cosa del genere:
  FILE HEADER VALUES
             14C machine (x86)
             ....


se è 64 bit riceviamo una cosa del genere:
  FILE HEADER VALUES
             8664 machine (x64)
             ....

Ricavare dettaglio Errore in Oracle


Il software vi da un errore Oracle e non potete andare in debug  (o non volete perchè ci vuole troppo), ecco una utile soluzione.
Tacciare gli errori oracle mediante un trigger che si attiva al servererror

create table track_detail (val varchar2(4000));

create or replace procedure track (p_text IN VARCHAR2) IS
  PRAGMA AUTONOMOUS_TRANSACTION;
begin
  insert into track_detail(val)
  values (p_text);
  commit;
end;

create or replace TRIGGER log_err after servererror on schema
DECLARE
  v_temp VARCHAR2(2000) := substr(dbms_utility.format_error_stack,1,2000);
  v_num NUMBER;
  v_sql_text ora_name_list_t;
begin
  v_temp := translate(v_temp,'''','"');
  track(v_temp);
  v_num  := ora_sql_txt(v_sql_text);
  v_temp := null;
  BEGIN
    FOR i IN 1..v_num LOOP
      v_temp := v_temp || v_sql_text(i);
    END LOOP;
  EXCEPTION
    WHEN VALUE_ERROR THEN NULL;
  END;
  v_temp := translate(v_temp,''''||chr(0)||chr(10),'"');
  track(v_temp);
end;

dopo una bella
select * from track_detail

vi fornirà errore e select che l'applicativo vuole richiamare e la potete lanciare da un query browser o altro ide.

Attenzione: Eliminare dopo l'uso il trigger e la tabella
drop trigger LOG_ERR;

drop table TRACK_DETAIL;

mercoledì 21 agosto 2013

Popolare un TreeView con un DataTable

Per Popolare dinamicamente un TreeView da un DataTable utilizzare questa classe, richiamabile con 

CreateTreeViewFromDataTable.BuildTree(dt, tvSchedeCollegate, True, "Testo", "IdScheda", "IdPadre")



Class CreateTreeViewFromDataTable
    ' This Dictionary will identify each List<TreeNode>
    ' And the List<TreeNode> will restore the all TreeNode from a same parentNode
    Private Shared dic As Dictionary(Of Integer, List(Of TreeNode))

    Public Shared Sub BuildTree(ByVal dt As DataTable, ByVal treeView As TreeView, ByVal expandAll As [Boolean], ByVal displayName As String, ByVal nodeId As String, ByVal parentId As String)
        ' Clear the TreeView if there are another datas in this TreeView
        treeView.Nodes.Clear()

        dic = New Dictionary(Of Integer, List(Of TreeNode))()

        Dim node As TreeNode = Nothing

        For Each row As DataRow In dt.Rows

            ' Restore each record into a TreeNode
            node = New TreeNode(row(displayName).ToString())
            node.Tag = row(nodeId)
            node.BackColor = Color.FromArgb(row("Colore"))
            ' The parentId of the TreeView's root is "" in the DataTable
            ' So if the parentId is a "", then it is the root
            ' Otherwise it is only a common TreeNode
            If row(parentId).ToString() <> "0" Then
                Dim _parentId As Integer = Convert.ToInt32(row(parentId))

                ' If there's exists a List<TreeNode> was identified by this _parentId
                ' Then we need put this node into this identified List<TreeNode>
                If dic.ContainsKey(_parentId) Then
                    dic(_parentId).Add(node)
                Else
                    ' Otherwise
                    ' We will Add a new record into the Dictionary<int, List<TreeNode>>
                    dic.Add(_parentId, New List(Of TreeNode)())

                    ' Then put this node into the new List<TreeNode>
                    dic(_parentId).Add(node)
                End If
            Else
                ' Take this node into the place of the TreeView's root
                node.NodeFont = New Font(treeView.Font, FontStyle.Bold)
                node.BackColor = Color.FromArgb(row("Colore"))
                node.Text = "[" & row("DesSpeciale") & "]" & vbTab & vbTab & node.Text
                treeView.Nodes.Add(node)
            End If
        Next

        ' After collect and identify each collection with their parentId
        ' We will go on building this tree with the founded root node
        SearchChildNodes(treeView.Nodes(0))

        If expandAll Then
            ' Expand the TreeView
            treeView.ExpandAll()
        End If
    End Sub

    Private Shared Sub SearchChildNodes(ByVal parentNode As TreeNode)

        If Not dic.ContainsKey(Convert.ToInt32(parentNode.Tag)) Then
            ' If there's no a identified collection by this parentId
            ' We will do nothing and return directly
            Return
        End If

        ' Put the identified collection by this parentId into the tree as this node's children
        parentNode.Nodes.AddRange(dic(Convert.ToInt32(parentNode.Tag)).ToArray())

        ' See these children nodes as parent nodes
        For Each _parentNode As TreeNode In dic(Convert.ToInt32(parentNode.Tag)).ToArray()
            ' Then go to find the identified collection by these id
            SearchChildNodes(_parentNode)
        Next
    End Sub
End Class

martedì 9 luglio 2013

Creare un report in PDF ed inviarlo per e-mai

Per Creare un report in PDF ed inviarlo per e-mail utilizzare il seguente  codice:




    Public Sub ExecManutenzione(isTest As Boolean)
        Try
            Dim report As New ReportDocument
            report.Load("ReportFile")

            report.SetDatabaseLogon("DatabaseUser", "DatabasePassword", "DatabaseServer", "DatabaseDb")

            report.SetParameterValue("@Data", DateTime.Now)
            SendEmail("AddressFrom", "AddressTo", "Report", "In Allegato il report", report, "fileName.pdf")
          
        Catch ex As Exception
            Common.Utility.Log("Nel ExecManutenzione " & vbCrLf & ex.Message)
        End Try
    End Sub

    Public Sub SendEmail(AddressFrom As String, AddressTo As String, subject As String, body As String, rpt As ReportDocument, fileName As String)
        Try
            Dim mm As New MailMessage()
            mm.From = New MailAddress(AddressFrom)

            Dim destinatari As String() = AddressTo.Split(";")
            For Each destinatario As String In destinatari
                mm.To.Add(destinatario)
            Next

            'mm.[To].Add(New MailAddress(AddressTo, "To Name"))
            mm.Subject = subject
            mm.Body = body
            mm.Attachments.Add(New Attachment(rpt.ExportToStream(ExportFormatType.PortableDocFormat), fileName))

            Dim sc As New SmtpClient
            sc.Send(mm)
        Catch ex As Exception
            Common.Utility.Log("Nel SendEmail " & vbCrLf & ex.Message)
        End Try
    End Sub



giovedì 18 aprile 2013

Installare il framework 4 su IIS 7.


%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
If I had been on a 32 bit system, it would have looked like the following:
%windir%\Microsoft.NET\Framework\v4.0.21006\aspnet_regiis.exe -i

mercoledì 10 aprile 2013

Scrivere risultato query in riga separato da virgola


Select *
      , STUFF(
         (
           select ', ' +  titIngrediente
     from tbingredienti
    where titIngrediente.idProdotto = TbProdotti.idProdotto
  FOR XML PATH('')
         ), 1, 1, ''
       ) AS [accessories]
FROM [TbProdotti]

giovedì 4 aprile 2013

Disabilitare compatibilità di Internet Explorer

Per disabilitare la compatibilità di Internet Explorer aggiunere:
1. Master Page


<head>
   <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
</head>


2. nel Web.config
<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=Edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

martedì 29 gennaio 2013

Castare un DateTime in formato Date

(SELECT CONVERT(VARCHAR(10), pn_datreg, 103) AS [DD/MM/YYYY]) as datreg

lunedì 28 gennaio 2013

UpdateProgress

E' possibile utilizzare un UpdateProgress abbinato all' UpdatePanel per fare in modo di visualizzare un'immagine di "attesa" durante il caricamento del pannello.



<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
      <div style="position: fixed; text-align: center; height: 100%; width: 100%; top: 0; right: 0; left: 0; z-index: 9999999; background-color: #000000; opacity: 0.7;">
        <asp:Image ID="imgUpdateProgress" runat="server" ImageUrl="images/ajax-Progress.gif" AlternateText="Attendere prego..." ToolTip="Attendere prego..." style="padding: 10px;position:fixed;top:45%;left:50%;" />
     </div>
</ProgressTemplate>
</asp:UpdateProgress>  
 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
    </ContentTemplate>
</asp:UpdatePanel>



E' possibile personalizzare l'immagine visualizzata creandola da questo portale:

http://www.ajaxload.info/

giovedì 24 gennaio 2013

Scatenare l'evento postback all'interno di un UpdatePanel

Per far in modo che un elemento all'interno di un UpdatePanel scateni un postback, aggiungere queste righe nel Page_Load


        Dim scriptManager As ScriptManager = scriptManager.GetCurrent(Me.Page)
        scriptManager.RegisterPostBackControl(btnFattura)


Se invece abbiamo la necessità di far scatenare un evneto JavaScript dal CodeBehind è necesserio utilizzare questa procedura:


        Dim ObjScript As String = "openWinINFO('" & Nota & "');"
        ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), Guid.NewGuid().ToString(), ObjScript, True)

lunedì 21 gennaio 2013

TRY CATCH in Sql Server


Con questa procedura è possibile intercettare un particolare errore (in questo caso un Deadlock), e rieseguire la procedura richiesta, per un determinato numero di volte (per evitare un loop)
DECLARE @RetryCounter INT
SET @RetryCounter = 1
RETRY: -- Label RETRY
BEGIN TRANSACTION
BEGIN TRY

 UPDATE Customer SET LastName = 'John' WHERE CustomerId=111
 

 COMMIT TRANSACTION
END TRY
BEGIN CATCH
 PRINT 'Rollback Transaction'
 ROLLBACK TRANSACTION
 DECLARE @DoRetry bit; -- Whether to Retry transaction or not
 DECLARE @ErrorMessage varchar(500)
 SET @doRetry = 0;
 SET @ErrorMessage = ERROR_MESSAGE()
 IF ERROR_NUMBER() = 1205 -- Deadlock Error Number
 BEGIN
  SET @doRetry = 1; -- Set @doRetry to 1 only for Deadlock
 END
 IF @DoRetry = 1
 BEGIN
  SET @RetryCounter = @RetryCounter + 1 -- Increment Retry Counter By one
  IF (@RetryCounter > 3) -- Check whether Retry Counter reached to 3
  BEGIN
   RAISERROR(@ErrorMessage, 18, 1) -- Raise Error Message if 
    -- still deadlock occurred after three retries
  END
  ELSE
  BEGIN
   WAITFOR DELAY '00:00:00.05' -- Wait for 5 ms
   GOTO RETRY -- Go to Label RETRY
  END
 END
 ELSE
 BEGIN
  RAISERROR(@ErrorMessage, 18, 1)
 END
END CATCH

mercoledì 2 gennaio 2013

leggere un valore dalla radgrid on ItemCommand


Protected Sub RadGrid1_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles RadGrid1.ItemCommand

        Dim action As String = e.CommandName

        If (action = "XXX") Then

            Dim id As Integer = e.CommandArgument

            Dim item As GridItem = DirectCast(e.Item, GridItem)
            ' definire l'oggetto da leggere
            Dim campo As HiddenField = DirectCast(DirectCast(item, Telerik.Web.UI.GridDataItem).FindControl("hiddenCampo"), HiddenField)

            'definire il tipo di dato i uscita
            Dim valore As String = campo.Value

        End If

    End Sub

lunedì 3 dicembre 2012

Cursore


 Declare @EmpId int
Declare c Cursor For Select Distinct Employee_id From TableName
Open c

Fetch next From c into @EmpId


While @@Fetch_Status=0 Begin
   ... do whatever you want ...
   Fetch next From c into @EmpId
End


Close c
Deallocate c

giovedì 20 settembre 2012

Aggiornare Firma Progetto Visual Studio

Per prolungare la scadenza di una firma è possibile utilizzare la procedura come descritto qui:

https://robindotnet.wordpress.com/2010/01/26/how-to-extend-an-existing-certificate-even-if-it-has-expired/#comments

tramite il file Renewcert.exe eseguire da riga di comando

RenewCert NightbirdPFX.pfx NightbirdPFX5Yrs.pfx CN=Nightbird5Yrs MYpassw0rd

eventualemente omettendo la password finale.

mercoledì 5 settembre 2012

Ricerca in un DataTable


Dim dt As DataTable = xxxx
dt = SelectIntoDataTable("tipologia = 'S' and dt_inizio > #" & Now.ToString("MM/dd/yyyy") & "#", dt)
Private Function SelectIntoDataTable(ByVal selectFilter As String, ByVal sourceDataTable As DataTable) As DataTable
        Dim newDataTable As DataTable = sourceDataTable.Clone
        Dim dataRows As DataRow() = sourceDataTable.Select(selectFilter)
        Dim typeDataRow As DataRow
        For Each typeDataRow In dataRows
            newDataTable.ImportRow(typeDataRow)
        Next
        Return newDataTable
    End Function

mercoledì 18 aprile 2012

Inserire un risultato di una select in un parametro

Per inserire il risultato di una select (quindi da varie righe di risultati) in un parametro è possibile utilizzare il metodo COALESCE come segue:

DECLARE @Padri NVARCHAR(MAX)
SELECT @Padri = COALESCE(@Padri + ', ', '') + padri FROM cteSelezionata

martedì 3 aprile 2012

Creare un datatable random

    '''

    ''' funzione che Randomizza un datatable specifico
    '''

    '''
    '''
    '''
    Public Shared Function RandomDatatable(ByVal dt As DataTable) As DataTable

        dt.Columns.Add(New DataColumn("RandNum", GetType(Integer)))
        Dim i As Integer
        Dim rndNum As New Random()
        For i = 0 To dt.Rows.Count - 1
            dt.Rows(i)("RandNum") = rndNum.Next(10000)
        Next i
        Dim myDataView As DataView = dt.DefaultView
        myDataView.Sort = "RandNum"

        Return myDataView.ToTable()

    End Function

mercoledì 29 febbraio 2012

Ricavare Giorno della settimana da una data

SELECT    CASE
            WHEN DATENAME(dw, GETDATE()) = 'Sunday'
                THEN 'Domenica'
            WHEN DATENAME(dw, GETDATE()) = 'Monday'
                THEN 'Lunedi'
            WHEN DATENAME(dw, GETDATE()) = 'Tuesday'
                THEN 'Martedi'
            WHEN DATENAME(dw, GETDATE()) = 'Wednesday'
                THEN 'Mercoledi'
            WHEN DATENAME(dw, GETDATE()) = 'Thursday'
                THEN 'Giovedi'
            WHEN DATENAME(dw, GETDATE()) = 'Friday'
                THEN 'Venerdi'
            WHEN DATENAME(dw, GETDATE()) = 'Saturday'
                THEN 'Sabato'
            ELSE 'Errore'
        END AS Giorno

lunedì 27 febbraio 2012

CTE che contiene una colonna contatore generata

declare @limit int
set @limit = 100

;with MyCte AS
    (select   MyCounter = 1
     UNION ALL
     SELECT   MyCounter + 1
     FROM     MyCte
     where    MyCounter < @limit )
    
select MyCounter
from   MyCte
option (maxrecursion 0)

venerdì 24 febbraio 2012

aggiungere server collegato Access ACCDB

declare @nomeServer nvarchar(MAX)
declare @serverPath nvarchar(MAX)  /* il file deve essere SULLA STESSA MACCHINA*/
set @nomeServer = 'server name'
set @serverPath = 'file mdb full path'

EXEC sp_addlinkedserver
    @server = @nomeServer,
    @provider = N'Microsoft.Jet.OLEDB.4.0',
    @srvproduct = N'Access',
    @datasrc = @serverPath

-- setto logina al nuovo Server DB
EXEC sp_addlinkedsrvlogin
    @rmtsrvname = @nomeServer,
    @useself = N'FALSE'
    /* dati non necessari per DB senza USR e PSW */
    --,@locallogin = NULL
    --,@rmtuser = NULL 
    --,@rmtpassword = NULL

-- TEST: lista tabelle per nuovo server
EXEC sp_tables_ex @nomeServer
GO

venerdì 16 dicembre 2011

Calcolare pesantezza Tabelle sql




 SELECT SYS_OBJ.NAME AS "TABLE NAME"

     , SYS_INDX.ROWCNT AS "ROW COUNT"

FROM SYSOBJECTS SYS_OBJ, SYSINDEXES SYS_INDX



WHERE SYS_INDX.ID = SYS_OBJ.ID

  AND INDID IN(0,1)

  AND XTYPE = 'U'

 AND SYS_OBJ.NAME <> 'SYSDIAGRAMS'



ORDER BY SYS_INDX.rowcnt DESC

COMPUTE SUM(SYS_INDX.ROWCNT)

lunedì 31 ottobre 2011

Resettare cache in pagina Web

Per resettare la Cache e obbligare il ricaricamento di tutti i contenuti aggiungere questi meta alla pagina:





    <meta http-equiv="CACHE-CONTROL" content="NO-CACHE" />

    <meta http-equiv="EXPIRES" content="0" />

    <meta http-equiv="PRAGMA" content="NO-CACHE" />

martedì 13 settembre 2011

settare un campo di tipo datetime in SQL


update NomeTabella

set NomeColonna = convert(datetime,'31/12/2099')
WHERE nnc_cartcanas = 'ADB'

Lanciare una pagina in target _blank da code behind

Per aprire un link in una nuova scheda utilizzare il codice:

Response.Write("")

Aggiungere un controllo dinamicamente alla pagina

Per aggiungere un controllo dinamicamente ad una pagina aspx è necessario utilizzare il seguente frammento di codice:
Dim ctrlInstances As SearchAreasInstancesUsc = LoadControl("SearchAreaInstancesUsc.ascx")


é fondamentale settare un Identificatore unico al controllo, in modo da non creare sovrapposizione delle informazioni tra i controlli attualmente presenti nella pagina.
ctrlInstances.ID = 1

giovedì 4 agosto 2011

Inserire Codice nel blog

Spesso mi capitava di dover inserire codice html sui post di blogger, ma visto che la piattaforma del blog "capisce" l'html, lo interpretava senza pubblicare il codice cosi com'era...

Per fare in modo che venga pubblicato il "codice puro" si deve fare affidamento a dei programmini che "proteggono" il codice da inserire, ve ne segnalo uno di esempio, ma in rete se ne trovano parecchi:

http://www.simplebits.com/

Ricerca di Google dal sito web

Per inserire una ricerca di google direttamente dal sito web è sufficiente inserire questo frammento di codice nella pagina web:


<center>

<FORM method=GET action="http://www.google.com/search">

<TABLE bgcolor="#FFFFFF"><tr><td>

<A HREF="http://www.google.com" target="_blank">

<IMG SRC="http://www.google.com/logos/Logo_40wht.gif" border="0"

ALT="Google" align="absmiddle"></A>

<INPUT TYPE=text name=q size=31 maxlength=255 value="">

<INPUT TYPE=hidden name=hl value=it>

<INPUT type=submit name=btnG VALUE="Cerca con Google">

</td></tr></TABLE>

</FORM>

</center>



martedì 2 agosto 2011

Versione progetto ClickOnce

Per ottenere il numero di versione per le applicazioni distribuite tramite il clickonce è sufficiente importare la referenza al progetto all'oggetto System.Deployment
e tramite il seguente codice:

if
(System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
this.Text = String.Format("MRS Map Printing Manager {0}",
Application.ApplicationDeployment.CurrentDeployment.CurrentVersion);
}

giovedì 7 luglio 2011

Ricavare il primo elemento di un gruppo di elementi


;WITH cte AS

(
SELECT n = row_number() over (partition by IdContatto order by IdLoginHistory desc)
, *
FROM TbLoginHistory
)
SELECT *
FROM cte
INNER JOIN TbContatti ON cte.IdContatto = TbContatti.IdContatto
WHERE n = 1
ORDER BY TbContatti.Cognome

martedì 28 giugno 2011

Ultimo giorno del mese in VBScript

Function UltimoGiorno(Data_Gio as Date) as Date
if Date_Gio = "" then
Data_Gio = Date
end if
UltimoGiorno = DateSerial( Year(Data_Gio), Month(Data_Gio)+1, 0 )
End Function

lunedì 13 giugno 2011

Ottenere ultimo giorno del mese

Per ottenere la data dell'ultimo giorno del mese

select
DATEADD(month, ((YEAR(GETDATE()) - 1900) * 12) + MONTH(GETDATE()), -1) as fine_mese

venerdì 20 maggio 2011

Eseguire chiamata Post a una pagina esterna

Per eseguire una chiamata ad un link passando dei parametri in post.


Response.Clear()

Dim sb As New StringBuilder()
sb.Append("")
sb.AppendFormat("")
sb.AppendFormat("
", link)
sb.AppendFormat("", UserName)
sb.AppendFormat("", Password)
' Other params go here
sb.Append("")

sb.Append("")
sb.Append("")

Response.Write(sb.ToString())

Response.End()

venerdì 6 maggio 2011

Abilitare scrittura campo Identity

Per abilitare la scrittura di un campo idendity di Sql Server inserire prima del codice Insert lo script:

SET IDENTITY_INSERT [dbo].[Tabella] ON

e dopo l'inserimento dei campi riabilitare il normale funzionamento con

SET IDENTITY_INSERT [dbo].[Tabella] OFF

martedì 5 aprile 2011

Passare parametri in post dinamicamente

Grazie a questo frammento di codice è possibile aprire un link passando dei parametri popolati dinamicamente.

Public Sub ApriLink(ByVal linkURL As String)
Dim UserName As String = "Username"
Dim Password As String = "Password"

Response.Clear()

Dim sb As New StringBuilder()
sb.Append("")
sb.AppendFormat("")
sb.AppendFormat("
", linkURL)
sb.AppendFormat("", UserName)
sb.AppendFormat("", Password)
' Other params go here
sb.Append("")

sb.Append("")
sb.Append("")

Response.Write(sb.ToString())

Response.End()
End Sub

mercoledì 23 marzo 2011

Unable to load DLL ‘sqlceme35.dll’

Se state sviluppando un’applicazione che utilizza SQL Server Compact Edition su una macchina x64, impostare nelle opzioni avanzate di compilazione la CPU di destinazione come “x86” e non “AnyCPU” per non incorrere nell’errore sopracitato (un P/Invoke non riuscito da parte di System.Data.SqlServerCe verso sqlceme35.dll). E’ da tenere conto che si applica sia alla versione 3.0, alla 3.5 ed alla 4. Questo perchè SQL Server Compact Edition su macchina x64 gira in WoW (Windows on Windows, emulazione x86 su x64).

venerdì 25 febbraio 2011

Chiamata a una funzione remota e incapsulare la risposta in una tabella temporanea

Con questa procedura è possibile richiamare una funzione su un server remoto, fare attenzione che prima devono essere abilitate le chiamate remote come descritto nel precedente post.
Creare la tabella Temporanea

CREATE TABLE #tmp (
cod char(10) ,
username varchar(80),
Codice_web varchar(10)
)


Dichiarare i parametri:

declare @la float
declare @lo float
declare @categoria nvarchar(MAX)


Dichiarare una stringa dove è possibile inserire i parametri:

DECLARE @sqlQuery VARCHAR(8000)
SET @sqlQuery = 'SELECT cod
, username
,Codice_web
FROM [DBRemoto].[dbo].[GeoSearch](
' + str(@lo) + '
, ' + str(@la) + '
, ''''' + @categoria + '''''
)'


E la stringa dove effettuare la chiamata remota e inserisci i risultati nella tabella temporanea:


DECLARE @finalQuery VARCHAR(8000)
SET @finalQuery = 'INSERT into #tmp SELECT cod
, username
,Codice_web
FROM OPENQUERY([ServerCollegato],' + '''' + @sqlQuery + '''' + ')'


Alla fine si esegue la chiamata con

EXEC (@finalQuery)

select * from #tmp

drop table #tmp

lunedì 3 gennaio 2011

Errore in visualizzazione pagine di Visual Studio 2008

A seguito di una installazione (o modifiche Software) al Visual Studio possiamo incappare in un errore di questo genere quando tentiamo di aprire una pagina aspx:

package 'Visual Web Developer HTML SourceEditor Package' has failed to load properly (GUID={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}}'

Per risolvere è sufficiente seguire la seguente procedura:

Aprire VS2008, click su Tools/Options

Check "Show all settings" option

Selezionare Environment/International Settings

Cambiare la lingua del combo box

Chiudere VS2008.

Lanciare da riga di comando devenv /resetskippkgs

martedì 12 ottobre 2010

Lanciare Stored Procedure su server remoto

Per lanciare una stored procedure su un server remoto è necessario aggiungere il server come server collegato (vedi procedura descritta in post precedente) e inoltre aggiungere l'opzione rpc = true e rpc out = true in questo modo:

EXEC master.dbo.sp_serveroption @server=N'Knauf_SIMI', @optname=N'rpc', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'Knauf_SIMI', @optname=N'rpc out', @optvalue=N'true'
GO


successivamente è sufficiente eseguire la procedura con la chiamata

EXEC [LinkedServer].Database.[dbOwner].[StoredProcedure] @param.

mercoledì 11 agosto 2010

Frammento di codice per il collegamento al db Sql Server

Dim connection As String = "Data Source=.\Istanza;Initial Catalog=Databas;User Id=Username;Password=Password;pooling=false;"
Dim cn As New SqlConnection(connection)
cn.Open()

Dim cm As New SqlCommand
cm.Connection = cn
Dim strSQL As String = "select * from TbContatti"
cm.CommandText = strSQL

Dim dt As New DataTable
Dim da As New SqlDataAdapter(cm)
da.Fill(dt)

lunedì 7 giugno 2010

Trovare Righe duplicate

Per trovare righe duplicate in una tabella Sql Server utilizzare il seguente script:

SELECT IdPigmento
, UserName
FROM TbPrezziPigmenti
GROUP BY IdPigmento
,UserName
HAVING COUNT(*) > 1

martedì 1 giugno 2010

Creare Datetime da Anno e Mese

Grazie a questo script è possibile creare un parametro Datetime avendo in ingresso anno e mese passati come interi.

declare @dt datetime

declare @anno int
set @anno = 2010

declare @MM int
set @MM = 6

declare @UTC nvarchar(8)
set @UTC = ltrim(rtrim(ltrim(rtrim(str(@anno)))))

DECLARE @GG nvarchar(2)
SET @GG = '01'

IF @MM < 10
SET @UTC = @UTC + '0' + ltrim(str(@MM))
ELSE
SET @UTC = @UTC + ltrim(rtrim(str(@MM)))

SET @UTC = @UTC + @GG

set @dt = cast(@UTC as datetime)
select @dt


Meglio con questa formattazione:

CAST(CAST(@y AS varchar) + '-' + CAST(@m AS varchar) + '-' + CAST('01' AS varchar) AS DATETIME)

lunedì 17 maggio 2010

Creazione Shortcut in progetti setup

Quando vogliamo inserire un collegamento (ad esempio nella cartella Send To) dobbiamo gestire la gestione dei collegamenti, perchè per default viene creata con "Advtertised Shortcut" mentre Send To funziona solo con "Regular Shortcut".
Per fare questo una volta creato il file di setup è necessario modificarlo con Orca, e nel menù Properties inserire la chiave "DISABLEADVTSHORTCUTS=1"

giovedì 6 maggio 2010

Ridurre il file di Log di SQL

Per ridurre il file di log di SQL Server i .ldf, è possibile procedere attraverso il management studio cliccando con il tasto destro sul database interessato, poi Tasks, Shrink ed infine Database.
In questo modo viene visualizzata la finestra dov'è possibile ridurre il file .ldf

giovedì 8 aprile 2010

Uccidere i processi attivi su un database

Grazie a questo script è possibile bloccare tutti i processi attivi su un database

DECLARE @DatabaseName nvarchar(50)
SET @DatabaseName = N'NomeDatabase'

DECLARE @STR_SQL nvarchar(max)
SET @STR_SQL = ''

SELECT @STR_SQL = @STR_SQL + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId

EXEC(@STR_SQL)

martedì 30 marzo 2010

Shortcut utili

Nel pacchetto di programmi Visual studio e SQL server è utile conoscere delle scorciatoie per velocizzare le operazioni.
Oggi grazie al buon Toby ho imparato questi:

CTRL + K + D Per Formattare tutto il file
CTRL + K + F Per formattare solo la parte selezionata

CTRL + K + C Per commentare
CTRL + K + D Per decommentare

lunedì 15 marzo 2010

Abilitare l'Update in oggetti SQL

Per permettere l'Update in oggetti già creati Sql Server è sufficiente impostare le opzioni come da immagine