public override RDFStore AddQuadruple(RDFQuadruple quadruple)
{
if (quadruple != null) {
//Create command
var command = new SqlCommand("IF NOT EXISTS(SELECT 1 FROM [dbo].[Quadruples] WHERE [QuadrupleID] = @QID) BEGIN INSERT INTO [dbo].[Quadruples]([QuadrupleID], [TripleFlavor], [Context], [ContextID], [Subject], [SubjectID], [Predicate], [PredicateID], [Object], [ObjectID]) VALUES (@QID, @TFV, @CTX, @CTXID, @SUBJ, @SUBJID, @PRED, @PREDID, @OBJ, @OBJID) END", this.Connection);
command.Parameters.Add(new SqlParameter("QID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("CTX", SqlDbType.VarChar, 1000));
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("SUBJ", SqlDbType.VarChar, 1000));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PRED", SqlDbType.VarChar, 1000));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJ", SqlDbType.VarChar, 1000));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
//Valorize parameters
command.Parameters["QID"].Value = quadruple.QuadrupleID;
command.Parameters["TFV"].Value = quadruple.TripleFlavor;
command.Parameters["CTX"].Value = quadruple.Context.ToString();
command.Parameters["CTXID"].Value = quadruple.Context.PatternMemberID;
command.Parameters["SUBJ"].Value = quadruple.Subject.ToString();
command.Parameters["SUBJID"].Value = quadruple.Subject.PatternMemberID;
command.Parameters["PRED"].Value = quadruple.Predicate.ToString();
command.Parameters["PREDID"].Value = quadruple.Predicate.PatternMemberID;
command.Parameters["OBJ"].Value = quadruple.Object.ToString();
command.Parameters["OBJID"].Value = quadruple.Object.PatternMemberID;
try {
//Open connection
this.Connection.Open();
//Prepare command
command.Prepare();
//Open transaction
command.Transaction = this.Connection.BeginTransaction();
//Execute command
command.ExecuteNonQuery();
//Close transaction
command.Transaction.Commit();
//Close connection
this.Connection.Close();
}
catch (Exception ex) {
//Rollback transaction
command.Transaction.Rollback();
//Close connection
this.Connection.Close();
//Propagate exception
throw new RDFStoreException("Cannot insert data into SQL Server store because: " + ex.Message, ex);
}
}
return this;
}