mercoledì 7 settembre 2016

How to create a subfolder in a SQL Server FileTable


SQL Server 2012

The scope of this post is that to explain how to create a subfolder in a SQL Server FileTable (Documents). I suppose that the FileTable already exists.

I want to create a subfolder like this:

{root}\{folder1}\{folder2}\{filename}

and to get the new hierarchyID for the path, I use this formula:

parentpath.ToString()

 + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()),

                                                  1, 6))) + '.'

 + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()),

                                                  7, 6))) + '.'

 + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()),

                                                  13, 4))) + '/'

This is the T-SQL code:

CREATE PROCEDURE [dbo].[SetDocumentContent]
                @IdFileData bigint,
                @file_stream image
AS
BEGIN
                DECLARE @FileName varchar(255)
                DECLARE @DocumentClassification varchar(50)
                DECLARE @ETSIdImpianto int

                DECLARE @DocumentClassification_path_locator hierarchyid
                DECLARE @ETSIdImpianto_path_locator hierarchyid
                DECLARE @FileName_path_locator hierarchyid

                -- Metadata to identify the correct document. The FileData is my internal table.            
SELECT @FileName = Name, @DocumentClassification = DCT.Description, @ETSIdImpianto=ETSIdImpianto
                               FROM FileData FD INNER JOIN DocumentClassificationType DCT
                               ON FD.IdDocumentClassificationType = DCT.Id  WHERE FD.Id = @IdFileData

                -- 1. If folder1 exists      
                SELECT @DocumentClassification_path_locator = path_locator FROM Documents
                WHERE name = @DocumentClassification AND is_directory = 1

                IF (@DocumentClassification_path_locator IS NULL)
                BEGIN
                               INSERT INTO Documents
        ( name
        , is_directory)
    VALUES
        ( @DocumentClassification
        , 1)

                               -- Get the folder1
                               SELECT @DocumentClassification_path_locator = path_locator FROM Documents
                               WHERE name = @DocumentClassification AND is_directory = 1
                END

                -- 2. If folder2 exists      
                SELECT @ETSIdImpianto_path_locator = path_locator FROM Documents
                WHERE name = CAST(@ETSIdImpianto as varchar) AND is_directory = 1

                IF (@ETSIdImpianto_path_locator IS NULL)
                BEGIN
                               INSERT INTO Documents
        ( name                                                       
        , is_directory
                                                               , path_locator)
    VALUES
        ( CAST(@ETSIdImpianto as varchar)
        , 1
                                                               , @DocumentClassification_path_locator.ToString()
        + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()),
                                                         1, 6))) + '.'
        + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()),
                                                         7, 6))) + '.'
        + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()),
                                                         13, 4))) + '/')

                               -- Get the folder2
                               SELECT @ETSIdImpianto_path_locator = path_locator FROM Documents
                               WHERE name = CAST(@ETSIdImpianto as varchar) AND is_directory = 1
                END

                -- 3. The FileName
                SELECT @FileName_path_locator = path_locator FROM Documents
                WHERE name = @FileName AND is_directory = 0 AND parent_path_locator = @ETSIdImpianto_path_locator

                IF (@FileName_path_locator IS NULL)
                BEGIN
                               INSERT INTO Documents
        ( name                                                       
                                                               , file_stream       
                                                               , path_locator)
    VALUES
        ( @FileName
                                                               , @file_stream
                                                               , @ETSIdImpianto_path_locator.ToString()
        + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()),
                                                         1, 6))) + '.'
        + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()),
                                                         7, 6))) + '.'
        + CONVERT(VARCHAR(20), CONVERT(BIGINT, SUBSTRING(CONVERT(BINARY(16), NEWID()),
                                                         13, 4))) + '/')                           

                               SELECT @FileName_path_locator = path_locator FROM Documents
                               WHERE name = @FileName AND is_directory = 0 AND parent_path_locator = @ETSIdImpianto_path_locator
                END

Bye!

martedì 31 maggio 2016

Angular Connect 2016

Europe’s Largest Angular Conference

AngularConnect is a 2-day, multi-track conference featuring the world’s leading Angular experts, including the core Angular team at Google.

lunedì 9 maggio 2016

jsDay 2016


THE MOST USED LANGUAGE
THE MOST NEEDED CONFERENCE

May 11th-12th 2016 — Verona, Italy

From the organizers of the phpDay, the first international conference on JavaScript in Italy.

http://2016.jsday.it/  #jsDay

mercoledì 27 gennaio 2016

Using HTTP POST method with Postman

I tried the POSTMAN (https://www.getpostman.com/) for testing my REST web services. It is a good tool and when I used it with the GET method all was ok but with the POST method (I had to upload a photo), some problems occurred because I did not understand how to use the Content-Type parameter. I tried to insert it in the “Headers” tab with other parameters but it did not work.

The solution is to select the form-data option in the “Body” tab, enter a type “File” parameter and then you have to select the file for uploading.



Then if you select the “Generate code snippet” you will see the Content-Type parameter like this:

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW


Regards!

mercoledì 28 ottobre 2015

Could not load file or assembly or one of its dependencies. (Web application)

C# .NET Framework 4.5.1 - ASP.NET WebApi

In my web application, I use a .NET wrapper assembly that uses others COM libraries and when I start up the application, I receive this message error




I have copied all assemblies and the other libraries in my “bin” folder but the reason is that the COM libraries are not copied in the ASP.NET Temporary Files directory.

The solution is add this element in the web.config file.

<system.web>
    <!-- Sets a Boolean value indicating whether the assemblies of an application in the Bin directory
      are shadow copied to the application's ASP.NET Temporary Files directory. -->
    <hostingEnvironment shadowCopyBinAssemblies="false"/>
</system.web>

Kind regards!

mercoledì 30 settembre 2015

SSD Deep Dive - London, 10-12 November 2015

SDD Deep Dive is a new event from the organisers of Software Design & Development (SDD), with a new format - choose one of six intensive 3-day workshops, all presented by world-class experts

http://sddconf.com/ 

giovedì 11 giugno 2015

How set dynamically the background color in a TR element with AngularJS.

AngularJS v. 1.2.14, Bootstrap v3.3.4

In my application, I have a html page where I’d like to evidence with different background colors some rows based on “Thread affinity“ value: 1, 11, 12, …

First in my controller I have defined these functions:

function ContextsController($scope, $log, $location) {
      
var vm = this;
vm.getColor = GetColor;
function GetColor(affinity) {
if (affinity !== undefined) {
var g = 255 - (affinity * 10);
              var b = affinity * 10;

              if (g <= 0 || b > 255) {
                     return null;
              } else {
                     var color = rgbToHex(255, g, b);
                    return color;
              }                         
}
return null;
}

function componentToHex(c) {
var hex = c.toString(16);
       return hex.length === 1 ? "0" + hex : hex;
}

function rgbToHex(r, g, b) {
       return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
}
})();

Then in the html page I have added this code

<tr ng-repeat="context in vm.results.contexts"
ng-style="{'background-color': vm.getColor(context.ThreadAffinity)}">
       <td>{{context.IDContext}}</td>
       <td class="text-center">{{context.ThreadAffinity}}</td>
<td>
<div class="col-md-offset-6">
<span class="glyphicon glyphicon-check" aria-hidden="true" ng-show="context.Enabled==1"></span>
                    <span class="glyphicon glyphicon-unchecked" aria-hidden="true" ng-show="context.Enabled==0"></span>
             </div>
       </td> 
</tr>

Obviously, you can change the var “g” and “b” as you prefer.


This is the result, that it works fine for me.


See you!