Inserimento di dati Blob in MySQL e SQL Server

sqlgrinder In questo articolo viene illustrato un metodo di inserimento di dati blob in database SQL Server e MySql, l’utilizzo di questi campi è molto utile in alcuni casi e talvolta più sicuro e veloce del salvataggio di documenti, immagini ed altro su file-system.

Per prima cosa si va a creare il database:

CREATE DATABASE TestDB

Nel caso in cui si utilizzi Mysql useremo il comando:

CREATE TABLE `TestDB`.`STORED_FILES` (
`ID` INT NOT NULL AUTO_INCREMENT,
`DESCRIPTION` VARCHAR(255) NULL,
`SFILE` BLOB NULL,
`VERSION` CHAR(10) NULL,
`EXT` VARCHAR(50) NULL,
PRIMARY KEY (`ID`));

se invece il nostro database è SQL Server utilizzeremo:

  CREATE TABLE STORED_FILES
(
ID int NOT NULL IDENTITY (1, 1),
DESCRIPTION varchar(255) NULL,
SFILE image NULL,
VERSION char(10) NULL,
EXT varchar(50) NULL
)  ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.STORED_FILES ADD CONSTRAINT
PK_STORED_FILES PRIMARY KEY CLUSTERED
(
ID
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
            ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

In questo caso la definizione del campo nel quale verrà memorizzato il file non viene denominato “BLOB” ma “Image”

Creati database e tabelle vediamo il codice necessario per la connessione ed effettuare lo statement INSERT INTO per inserire un record contenente il file ed i suoi dati.

//definisco la posizione del file
string FilePath = @"test.bmp";
//estraggo la versione del file
var versionInfo = FileVersionInfo.GetVersionInfo(FilePath);
string ver = versionInfo.ProductVersion;

//Creazione della connessione e definizione del comando INSERT
MySqlConnection connection = new MySqlConnection(ConnectionString);
MySqlCommand command =
new MySqlCommand("INSERT INTO STORED_FILES (DESCRIPTION,SFILE,VERSION,EXT) VALUES (@Filename, @Data,@Ver,@Ext)", connection);

//Assegno i valori a parametri
command.Parameters.AddWithValue("@Filename", System.IO.Path.GetFileName(FilePath));
command.Parameters.AddWithValue("@Data", System.IO.File.ReadAllBytes(FilePath)); //
command.Parameters.AddWithValue("@Ver", ver);
command.Parameters.AddWithValue("@Ext", System.IO.Path.GetExtension(FilePath).Replace(".",""));

//Apro la connessione al database
connection.Open();

//Eseguo il comando
command.ExecuteNonQuery();

//Chiudo la connessione al database
connection.Close();
//definisco la posizione del file
string FilePath = @"C:\foo.jpeg";
//estraggo la versione del file
var versionInfo = FileVersionInfo.GetVersionInfo(openFileDialog1.FileName.ToString());
string ver = versionInfo.ProductVersion;

//Creazione della connessione e definizione del comando INSERT
SqlConnection connection = new SqlConnection(ConnectionString);
SqlCommand command =
new SqlCommand("INSERT INTO STORED_FILES (DESCRIPTION,SFILE,VERSION,EXT) VALUES (@Filename, @Data,@Ver,@Ext)", connection);

//Assegno i valori a parametri
command.Parameters.AddWithValue("@Filename", System.IO.Path.GetFileName(FilePath));
command.Parameters.AddWithValue("@Data", System.IO.File.ReadAllBytes(FilePath)); //
command.Parameters.AddWithValue("@Ver", ver);
command.Parameters.AddWithValue("@Ext", System.IO.Path.GetExtension(FilePath).Replace(".",""));  //sostituisco il punto con uno spazio vuoto per memorizzare l'estensione del file

//Apro la connessione al database
connection.Open();

//Eseguo il comando
command.ExecuteNonQuery();

//Chiudo la connessione al database
connection.Close();

Esempio dati Blob MySQL in C#

Ti potrebbe interessare anche...