Virtuoso Open-Source Edition

  • Topic
  • Discussion
  • VOS.VirtTipsAndTricksGuideADONETInsertBynary(Last) -- DAVWikiAdmin? , 2017-06-29 07:41:32 Edit WebDAV System Administrator 2017-06-29 07:41:32

    How can I insert binary data to Virtuoso RDF storage in plain queries and with parameter binding via ADO.NET calls?

    The following example shows different methods for insert binary data to Virtuoso RDF storage in plain queries and with parameter binding via ADO.NET calls.

    # Test_Bin.cs
    
    
    using System;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Data;
    using OpenLink.Data.Virtuoso;
    
    #if ODBC_CLIENT
    namespace OpenLink.Data.VirtuosoOdbcClient
    #elif CLIENT
    namespace OpenLink.Data.VirtuosoClient
    #else
    namespace OpenLink.Data.VirtuosoTest
    #endif
    {
        class Test_Bin
        {
            [STAThread]
            static void Main(string[] args)
            {
                IDataReader myread = null;
                IDbConnection c;
    
                c = new VirtuosoConnection("HOST=localhost:1111;UID=dba;PWD=dba;");
    
                IDbCommand cmd = c.CreateCommand();
                int ros;
    
                try
                {
                    c.Open();
    
                    cmd.CommandText = "sparql clear graph <ado.bin>";
                    cmd.ExecuteNonQuery();
    
    //insert binary as base64Binary
                    cmd.CommandText = "sparql insert into graph <ado.bin> { <res1> <attr> \"GpM7\"^^<http://www.w3.org/2001/XMLSchema#base64Binary> }";
                    cmd.ExecuteNonQuery();
    
    //insert binary as hexBinary
                    cmd.CommandText = "sparql insert into graph <ado.bin> { <res2> <attr> \"0FB7\"^^<http://www.w3.org/2001/XMLSchema#hexBinary> }";
                    cmd.ExecuteNonQuery();
    
    
    //prepare for insert with parameter binding
                    cmd.CommandText = "sparql define output:format '_JAVA_' insert into graph <ado.bin> { `iri($?)` <attr> `bif:__rdf_long_from_batch_params($?,$?,$?)` }";
    
    //bind parameters for insert binary as base64Binary
                    IDbDataParameter param = cmd.CreateParameter();
                    param.ParameterName = "p1";
                    param.DbType = DbType.AnsiString;
                    param.Value = "res3";
                    cmd.Parameters.Add(param);
    
                    param = cmd.CreateParameter();
                    param.ParameterName = "p2";
                    param.DbType = DbType.Int32;
                    param.Value = 4;
                    cmd.Parameters.Add(param);
    
                    param = cmd.CreateParameter();
                    param.ParameterName = "p3";
                    param.DbType = DbType.AnsiString;
                    param.Value = "GpM7";
                    cmd.Parameters.Add(param);
    
                    param = cmd.CreateParameter();
                    param.ParameterName = "p4";
                    param.DbType = DbType.AnsiString;
                    param.Value = "http://www.w3.org/2001/XMLSchema#base64Binary";
                    cmd.Parameters.Add(param);
    
                    cmd.ExecuteNonQuery();
    
                    cmd.Parameters.Clear();
    
    //bind parameters for insert binary as hexBinary
                    param = cmd.CreateParameter();
                    param.ParameterName = "p1";
                    param.DbType = DbType.AnsiString;
                    param.Value = "res4";
                    cmd.Parameters.Add(param);
    
                    param = cmd.CreateParameter();
                    param.ParameterName = "p2";
                    param.DbType = DbType.Int32;
                    param.Value = 4;
                    cmd.Parameters.Add(param);
    
                    param = cmd.CreateParameter();
                    param.ParameterName = "p3";
                    param.DbType = DbType.AnsiString;
                    param.Value = "0FB7";
                    cmd.Parameters.Add(param);
    
                    param = cmd.CreateParameter();
                    param.ParameterName = "p4";
                    param.DbType = DbType.AnsiString;
                    param.Value = "http://www.w3.org/2001/XMLSchema#hexBinary";
                    cmd.Parameters.Add(param);
    
                    cmd.ExecuteNonQuery();
    
                    cmd.Parameters.Clear();
    
    //bind parameters for insert binary as byte[]
                    param = cmd.CreateParameter();
                    param.ParameterName = "p1";
                    param.DbType = DbType.AnsiString;
                    param.Value = "res5";
                    cmd.Parameters.Add(param);
    
                    param = cmd.CreateParameter();
                    param.ParameterName = "p2";
                    param.DbType = DbType.Int32;
                    param.Value = 3;
                    cmd.Parameters.Add(param);
    
                    param = cmd.CreateParameter();
                    param.ParameterName = "p3";
                    param.DbType = DbType.Binary;
                    byte[] bin_val = {0x01, 0x02, 0x03, 0x04, 0x05};
                    param.Value = bin_val;
                    cmd.Parameters.Add(param);
    
                    param = cmd.CreateParameter();
                    param.ParameterName = "p4";
                    param.DbType = DbType.AnsiString;
                    param.Value = System.DBNull.Value; 
                    cmd.Parameters.Add(param);
    
                    cmd.ExecuteNonQuery();
    
                    cmd.Parameters.Clear();
    
    //execute select and check the results
                    cmd.CommandText = "sparql SELECT ?s ?o FROM <ado.bin> WHERE {?s ?p ?o}"; ;
                    myread = cmd.ExecuteReader();
                    int r = 0;
    
                    while (myread.Read())
                    {
                        Console.WriteLine("=== ROW === "+r);
                        for (int i = 0; i < myread.FieldCount; i++)
                        {
                            string s;
                            if (myread.IsDBNull(i))
                                Console.Write("N/A|\n");
                            else
                            {
                                object o = myread.GetValue(i);
                                Type t = myread.GetFieldType(i);
    
                                s = myread.GetString(i);
                                Console.Write(s + "[");
                                if (o is SqlExtendedString)
                                {
                                    SqlExtendedString se = (SqlExtendedString)o;
                                    Console.Write("IriType=" + se.IriType + ";StrType=" + se.StrType + ";Value=" + se.ToString());
                                    Console.Write(";ObjectType=" + o.GetType() + "]|\n");
                                }
                                else if (o is SqlRdfBox)
                                {
                                    SqlRdfBox se = (SqlRdfBox)o;
                                    Console.Write("Lang=" + se.StrLang + ";Type=" + se.StrType + ";Value=" + se.Value);
                                    Console.Write(";ObjectType=" + o.GetType() + "]|\n");
                                    object v = se.Value;
                                    if (v is System.Byte[])
                                    {
                                        byte[] vb = (byte[])v;
                                        for (int z = 0; z < vb.Length; z++)
                                        {
                                            Console.WriteLine(""+z+"="+vb[z]);
                                        }
                                    }
                                }
                                else
                                    Console.Write(o.GetType() + "]|\n");
                            }
                        }
                        r++;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("{0} Exception caught.", e);
                }
                finally
                {
                    //		  if (myread != null)
                    //		    myread.Close();
    
                    if (c.State == ConnectionState.Open)
                        c.Close();
    
                }
    
            }
        }
    }
    

    Output log for example is in the log.txt:

    # log.txt
    === ROW === 0
    res1[IriType=IRI;StrType=IRI;Value=res1;ObjectType=OpenLink.Data.Virtuoso.SqlExtendedString]|
    GpM7[Lang=;Type=http://www.w3.org/2001/XMLSchema#base64Binary;Value=GpM7;ObjectType=OpenLink.Data.Virtuoso.SqlRdfBox]|
    === ROW === 1
    res2[IriType=IRI;StrType=IRI;Value=res2;ObjectType=OpenLink.Data.Virtuoso.SqlExtendedString]|
    0FB7[Lang=;Type=http://www.w3.org/2001/XMLSchema#hexBinary;Value=0FB7;ObjectType=OpenLink.Data.Virtuoso.SqlRdfBox]|
    === ROW === 2
    res3[IriType=IRI;StrType=IRI;Value=res3;ObjectType=OpenLink.Data.Virtuoso.SqlExtendedString]|
    GpM7[Lang=;Type=http://www.w3.org/2001/XMLSchema#base64Binary;Value=GpM7;ObjectType=OpenLink.Data.Virtuoso.SqlRdfBox]|
    === ROW === 3
    res4[IriType=IRI;StrType=IRI;Value=res4;ObjectType=OpenLink.Data.Virtuoso.SqlExtendedString]|
    0FB7[Lang=;Type=http://www.w3.org/2001/XMLSchema#hexBinary;Value=0FB7;ObjectType=OpenLink.Data.Virtuoso.SqlRdfBox]|
    === ROW === 4
    res5[IriType=IRI;StrType=IRI;Value=res5;ObjectType=OpenLink.Data.Virtuoso.SqlExtendedString]|
    0102030405[System.Byte[]]|
    
    

    Related