Przejdź do treści stopki
POMOC .NET

C# SQLite (jak to działa dla programistów)

Wprowadzenie do SQLite

SQLite to samodzielny, bezserwerowy i niewymagający konfiguracji silnik bazy danych używany w różnych aplikacjach, w tym aplikacjach desktopowych, webowych oraz mobilnych. W tym samouczku zagłębimy się w używanie SQLite z C#. Przy użyciu prostych i łatwo zrozumiałych przykładów nauczysz się tworzyć, zarządzać i wchodzić w interakcję z bazą danych SQLite.

Czym jest SQLite?

SQLite to lekka i wydajna baza danych, która przechowuje dane w jednym pliku. W przeciwieństwie do tradycyjnych baz danych nie wymaga oddzielnego serwera. Czyni to SQLite świetnym wyborem dla aplikacji, które potrzebują bazy danych bez złożoności pełnego systemu bazodanowego.

Setting Up SQLite in C

Użycie Menadżera Pakietów NuGet

Aby pracować z SQLite w projekcie C#, musisz zainstalować niezbędną bibliotekę SQLite. Można to zrobić za pomocą Menadżera Pakietów NuGet.

  1. Otwórz Visual Studio i utwórz nową aplikację konsolową.
  2. Kliknij prawym przyciskiem myszy na projekcie i wybierz 'Zarządzaj pakietami NuGet'.
  3. Wyszukaj 'SQLite' i zainstaluj pakiet.

Nawiązywanie połączenia

Ciąg połączenia

Ciąg połączenia to ciąg, który określa informacje o źródle danych i sposoby połączenia się z nim. W SQLite ciąg połączenia często wygląda w ten sposób:

string connectionString = "Data Source=mydatabase.db;";
string connectionString = "Data Source=mydatabase.db;";
Dim connectionString As String = "Data Source=mydatabase.db;"
$vbLabelText   $csharpLabel

Obiekt połączenia

Możesz utworzyć obiekt połączenia używając klasy SQLiteConnection z przestrzeni nazw System.Data.SQLite.

using System.Data.SQLite;

// Initialize a connection to the SQLite database
var connection = new SQLiteConnection(connectionString);

// Open the connection
connection.Open();
using System.Data.SQLite;

// Initialize a connection to the SQLite database
var connection = new SQLiteConnection(connectionString);

// Open the connection
connection.Open();
Imports System.Data.SQLite

' Initialize a connection to the SQLite database
Private connection = New SQLiteConnection(connectionString)

' Open the connection
connection.Open()
$vbLabelText   $csharpLabel

Tworzenie tabeli

Utwórz tabelę

Tworzenie tabeli jest podstawą podczas pracy z jakąkolwiek bazą danych. Oto jak utworzyć tabelę używając kodu SQLite.

// SQL command to create a new table "person"
string query = "CREATE TABLE IF NOT EXISTS person (id INTEGER PRIMARY KEY, name TEXT)";

// Create a command object with the SQL query and connection
var command = new SQLiteCommand(query, connection);

// Execute the command to create the table
command.ExecuteNonQuery();
// SQL command to create a new table "person"
string query = "CREATE TABLE IF NOT EXISTS person (id INTEGER PRIMARY KEY, name TEXT)";

// Create a command object with the SQL query and connection
var command = new SQLiteCommand(query, connection);

// Execute the command to create the table
command.ExecuteNonQuery();
' SQL command to create a new table "person"
Dim query As String = "CREATE TABLE IF NOT EXISTS person (id INTEGER PRIMARY KEY, name TEXT)"

' Create a command object with the SQL query and connection
Dim command = New SQLiteCommand(query, connection)

' Execute the command to create the table
command.ExecuteNonQuery()
$vbLabelText   $csharpLabel
  • Id Integer Primary Key: Ustawia kolumnę 'id' jako klucz podstawowy.
  • Nazwa tabeli: Nazwa, którą chcesz nadać swojej tabeli bazy danych.

Wstawianie danych

Wstaw wiersze

Aby wstawić dane do tabeli, musisz użyć polecenia INSERT.

// SQL command to insert a new row into the "person" table
string query = "INSERT INTO person (name) VALUES ('John')";
var command = new SQLiteCommand(query, connection);
command.ExecuteNonQuery();
// SQL command to insert a new row into the "person" table
string query = "INSERT INTO person (name) VALUES ('John')";
var command = new SQLiteCommand(query, connection);
command.ExecuteNonQuery();
' SQL command to insert a new row into the "person" table
Dim query As String = "INSERT INTO person (name) VALUES ('John')"
Dim command = New SQLiteCommand(query, connection)
command.ExecuteNonQuery()
$vbLabelText   $csharpLabel

Sparametryzowane polecenie

Sparametryzowane polecenia mogą chronić twoją aplikację przed atakami SQL Injection. To podejście używa parametrów zamiast bezpośredniego wstawiania wartości do zapytania.

// SQL command with a parameter to insert data safely
string query = "INSERT INTO person (name) VALUES (@name)";
var command = new SQLiteCommand(query, connection);
command.Parameters.AddWithValue("@name", "Iron Developer");
command.ExecuteNonQuery();
// SQL command with a parameter to insert data safely
string query = "INSERT INTO person (name) VALUES (@name)";
var command = new SQLiteCommand(query, connection);
command.Parameters.AddWithValue("@name", "Iron Developer");
command.ExecuteNonQuery();
' SQL command with a parameter to insert data safely
Dim query As String = "INSERT INTO person (name) VALUES (@name)"
Dim command = New SQLiteCommand(query, connection)
command.Parameters.AddWithValue("@name", "Iron Developer")
command.ExecuteNonQuery()
$vbLabelText   $csharpLabel

Pobieranie danych

Instrukcja SELECT

Aby pobrać dane z tabeli bazy danych, użyj instrukcji SELECT.

// SQL command to select all rows from the "person" table
string query = "SELECT * FROM person";

var command = new SQLiteCommand(query, connection);
var reader = command.ExecuteReader();

// Loop through the result set and read data
while (reader.Read())
{
    Console.WriteLine(reader["name"]);
}
// SQL command to select all rows from the "person" table
string query = "SELECT * FROM person";

var command = new SQLiteCommand(query, connection);
var reader = command.ExecuteReader();

// Loop through the result set and read data
while (reader.Read())
{
    Console.WriteLine(reader["name"]);
}
' SQL command to select all rows from the "person" table
Dim query As String = "SELECT * FROM person"

Dim command = New SQLiteCommand(query, connection)
Dim reader = command.ExecuteReader()

' Loop through the result set and read data
Do While reader.Read()
	Console.WriteLine(reader("name"))
Loop
$vbLabelText   $csharpLabel

Zaawansowane funkcje

Transakcje SQLite

Transakcje pozwalają na wykonanie wielu operacji w jednym atomowym działaniu. Oto jak używać transakcji:

var transaction = connection.BeginTransaction();
try
{
    // Example of multiple operations in a transaction
    var insertCommand = new SQLiteCommand("INSERT INTO person (name) VALUES ('Alice')", connection, transaction);
    insertCommand.ExecuteNonQuery();

    var updateCommand = new SQLiteCommand("UPDATE person SET name = 'Bob' WHERE name = 'Alice'", connection, transaction);
    updateCommand.ExecuteNonQuery();

    transaction.Commit(); // Commit the transaction if all operations succeed
}
catch
{
    transaction.Rollback(); // Rollback the transaction if any operation fails
}
var transaction = connection.BeginTransaction();
try
{
    // Example of multiple operations in a transaction
    var insertCommand = new SQLiteCommand("INSERT INTO person (name) VALUES ('Alice')", connection, transaction);
    insertCommand.ExecuteNonQuery();

    var updateCommand = new SQLiteCommand("UPDATE person SET name = 'Bob' WHERE name = 'Alice'", connection, transaction);
    updateCommand.ExecuteNonQuery();

    transaction.Commit(); // Commit the transaction if all operations succeed
}
catch
{
    transaction.Rollback(); // Rollback the transaction if any operation fails
}
Dim transaction = connection.BeginTransaction()
Try
	' Example of multiple operations in a transaction
	Dim insertCommand = New SQLiteCommand("INSERT INTO person (name) VALUES ('Alice')", connection, transaction)
	insertCommand.ExecuteNonQuery()

	Dim updateCommand = New SQLiteCommand("UPDATE person SET name = 'Bob' WHERE name = 'Alice'", connection, transaction)
	updateCommand.ExecuteNonQuery()

	transaction.Commit() ' Commit the transaction if all operations succeed
Catch
	transaction.Rollback() ' Rollback the transaction if any operation fails
End Try
$vbLabelText   $csharpLabel

Mapowanie obiektowo-relacyjne (ORM) z Entity Framework

Entity Framework (EF) to szeroko stosowane narzędzie ORM w ekosystemie .NET. Ułatwia programowanie bazodanowe, pozwalając deweloperom pracować z danymi relacyjnymi przy użyciu obiektów specyficznych dla domeny. Oto jak możesz używać Entity Framework z SQLite.

1. Instalowanie Entity Framework

Najpierw upewnij się, że masz zainstalowany pakiet NuGet Entity Framework specyficzny dla SQLite:

  1. Otwórz Menadżera Pakietów NuGet w Visual Studio.
  2. Wyszukaj 'Entity Framework SQLite' i zainstaluj go.

2. Tworzenie klas encji

Klasy encji są reprezentacjami tabel bazy danych. Możesz utworzyć klasę dla każdej tabeli, z którą zamierzasz współpracować.

public class Person
{
    public int Id { get; set; } // Primary Key
    public string Name { get; set; }
}
public class Person
{
    public int Id { get; set; } // Primary Key
    public string Name { get; set; }
}
Public Class Person
	Public Property Id() As Integer ' -  Primary Key
	Public Property Name() As String
End Class
$vbLabelText   $csharpLabel

3. DbContext

Musisz utworzyć klasę dziedziczącą z DbContext. Klasa ta reprezentuje sesję z bazą danych i pozwala na zapytania i zapisywanie instancji encji.

using Microsoft.EntityFrameworkCore;

public class MyDbContext : DbContext
{
    public DbSet<Person> Persons { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=mydatabase.db;");
    }
}
using Microsoft.EntityFrameworkCore;

public class MyDbContext : DbContext
{
    public DbSet<Person> Persons { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=mydatabase.db;");
    }
}
Imports Microsoft.EntityFrameworkCore

Public Class MyDbContext
	Inherits DbContext

	Public Property Persons() As DbSet(Of Person)

	Protected Overrides Sub OnConfiguring(ByVal optionsBuilder As DbContextOptionsBuilder)
		optionsBuilder.UseSqlite("Data Source=mydatabase.db;")
	End Sub
End Class
$vbLabelText   $csharpLabel

4. Operacje CRUD

Entity Framework upraszcza operacje Create, Read, Update i Delete (CRUD). Oto jak możesz wstawić nowy rekord:

using (var db = new MyDbContext())
{
    db.Persons.Add(new Person { Name = "John" });
    db.SaveChanges();
}
using (var db = new MyDbContext())
{
    db.Persons.Add(new Person { Name = "John" });
    db.SaveChanges();
}
Using db = New MyDbContext()
	db.Persons.Add(New Person With {.Name = "John"})
	db.SaveChanges()
End Using
$vbLabelText   $csharpLabel

Odczyt, aktualizacja i usuwanie rekordów są równie uproszczone i przystępne z Entity Framework, co pozwala na zwięzły i łagodny w utrzymaniu kod.

Praca z plikami XML i innymi dostawcami danych

SQLite nie jest ograniczone do danych relacyjnych; zapewnia także elastyczność w obsłudze innych typów danych, w tym plików XML.

1. Przechowywanie danych XML

Możesz przechowywać dane XML w bazie danych SQLite. Może to być przydatne, jeśli pracujesz z danymi konfiguracyjnymi lub innymi strukturami hierarchicznymi.

string xmlData = "<person><name>John</name></person>";
string query = "INSERT INTO xmltable (data) VALUES (@data)";
var command = new SQLiteCommand(query, connection);
command.Parameters.AddWithValue("@data", xmlData);
command.ExecuteNonQuery();
string xmlData = "<person><name>John</name></person>";
string query = "INSERT INTO xmltable (data) VALUES (@data)";
var command = new SQLiteCommand(query, connection);
command.Parameters.AddWithValue("@data", xmlData);
command.ExecuteNonQuery();
Dim xmlData As String = "<person><name>John</name></person>"
Dim query As String = "INSERT INTO xmltable (data) VALUES (@data)"
Dim command = New SQLiteCommand(query, connection)
command.Parameters.AddWithValue("@data", xmlData)
command.ExecuteNonQuery()
$vbLabelText   $csharpLabel

Pobieranie danych XML

Możesz pobierać i pracować z danymi XML, używając standardowych technik analizy XML w C#.

string query = "SELECT data FROM xmltable WHERE id = 1";
var command = new SQLiteCommand(query, connection);
var reader = command.ExecuteReader();

string xmlData;

// Read the XML data from the query result
if (reader.Read())
{
    xmlData = reader["data"].ToString();
}

// Parse the XML data as needed using an XML parser
string query = "SELECT data FROM xmltable WHERE id = 1";
var command = new SQLiteCommand(query, connection);
var reader = command.ExecuteReader();

string xmlData;

// Read the XML data from the query result
if (reader.Read())
{
    xmlData = reader["data"].ToString();
}

// Parse the XML data as needed using an XML parser
Dim query As String = "SELECT data FROM xmltable WHERE id = 1"
Dim command = New SQLiteCommand(query, connection)
Dim reader = command.ExecuteReader()

Dim xmlData As String

' Read the XML data from the query result
If reader.Read() Then
	xmlData = reader("data").ToString()
End If

' Parse the XML data as needed using an XML parser
$vbLabelText   $csharpLabel

Praca z innymi dostawcami danych

SQLite dobrze integruje się z różnymi dostawcami danych, co pozwala na interoperacyjność i elastyczność. Oznacza to, że możesz płynnie przełączać się między różnymi bazami danych lub nawet łączyć różne źródła danych w jednej aplikacji.

Przedstawiamy Iron Suit: Potężny zestaw bibliotek

Po eksploracji światów SQLite i operatorów logicznych w C#, czas przedstawić niezwykły zbiór narzędzi, które uzupełniają i wzbogacają doświadczenie programistyczne w środowisku .NET. Iron Suit to kolekcja potężnych bibliotek składających się z IronPDF, IronXL, IronOCR i IronBarcode, z których każda pełni odrębne funkcje.

IronPDF: biblioteka PDF dla języka C

Przewodnik po IronPDF to kompleksowa biblioteka zaprojektowana do tworzenia, odczytywania i manipulowania plikami PDF w C#. Niezależnie od tego, czy potrzebujesz generować raporty, faktury, czy dokumenty w formacie PDF, IronPDF jest dla Ciebie. Unikalną cechą IronPDF jest możliwość konwersji HTML na PDF. Możesz renderować HTML jako dokument PDF, w tym CSS, JavaScript i obrazy, co czyni go potężnym narzędziem. Sprawdź ten samouczek na temat Konwersji HTML na PDF z IronPDF dla przewodnika krok po kroku.

Funkcja HTML na PDF w IronPDF to jego główna atrakcja, zachowując wszystkie układy i style. Generuje pliki PDF na podstawie treści internetowych, co idealnie nadaje się do raportów, faktur i dokumentacji. Możesz płynnie konwertować pliki HTML, adresy URL i ciągi znaków HTML do formatu PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF może być istotnym narzędziem podczas pracy z bazami danych SQLite. Możesz generować raporty PDF z danych bazy danych SQLite, co umożliwia płynne prezentowanie i udostępnianie danych.

IronXL: Łatwe zarządzanie plikami Excel

Odkryj IronXL do integracji z Excelem pozwalający deweloperom odczytywać, zapisywać i manipulować plikami Excel bez wysiłku. Jest kompatybilny z XLS, XLSX i innymi, co czyni go idealnym narzędziem do obsługi danych arkuszy kalkulacyjnych. Możesz odczytywać pliki Excel, manipulować nimi, a nawet tworzyć nowe pliki od podstaw. Funkcjonalność IronXL dobrze integruje się z zarządzaniem bazami danych, w tym SQLite, umożliwiając eksport i import danych.

IronOCR: Optical Character Recognition in C

Z IronOCR do rozpoznawania tekstu, skanowanie tekstu z obrazów i plików PDF jest proste. To wszechstronna biblioteka OCR (Optical Character Recognition), która rozpoznaje tekst z różnych źródeł.

Wyobraź sobie przechowywanie zeskanowanych dokumentów w bazie danych SQLite i używanie IronOCR do wyodrębniania i rozpoznawania tekstu w tych dokumentach. Możliwości są nieskończone, zapewniając potężne funkcjonalności przeszukiwania i wyszukiwania tekstu.

IronBarcode: Ostateczna biblioteka generowania i odczytywania kodów kreskowych

Generowanie i odczytywanie kodów kreskowych staje się proste dzięki Potężnej integracji kodów kreskowych przez IronBarcode. Obsługuje wiele formatów kodów kreskowych i oferuje solidne API dla wszystkich potrzeb związanych z kodami kreskowymi. IronBarcode może odgrywać istotną rolę w aplikacjach korzystających z SQLite, gdzie kody kreskowe mogą reprezentować produkty lub inne jednostki danych. Przechowywanie i pobieranie kodów kreskowych z bazy danych SQLite zwiększa integralność danych i ułatwia szybki dostęp.

Wnioski

SQLite to potężny, a jednocześnie lekki silnik bazy danych, który jest doskonały zarówno dla początkujących, jak i profesjonalistów. Od tworzenia tabel i wstawiania wierszy po zarządzanie transakcjami i zapobieganie atakom SQL Injection, SQLite oferuje wiele funkcji. Niezależnie od tego, czy budujesz aplikację konsolową lub mobilną, czy musisz pracować z kluczami obcymi i zestawami danych, SQLite jest doskonałym wyborem.

Iron Suit, składający się z IronPDF, IronXL, IronOCR i IronBarcode, jest skarbcem narzędzi, które rozszerzają możliwości twoich projektów deweloperskich w C#, czy to przy pracy z bazami danych SQLite, czy innych domen.

Co jeszcze bardziej przyciąga, każdy z tych produktów oferuje bezpłatną wersję próbną produktów Iron Software, dając ci wystarczająco dużo czasu na poznanie bogatego zestawu funkcji, które oferują. Gdy zdecydujesz się kontynuować pracę z tymi narzędziami, licencja zaczyna się od $799 za produkt. Możesz również kupić cały pakiet Iron Suit w cenie raptem dwóch pojedynczych produktów.

Często Zadawane Pytania

Jak moge skonfigurowac SQLite w projekcie C# uzywajac NuGet?

Aby skonfigurowac SQLite w projekcie C# uzywajac NuGet, otworz Visual Studio i stworz nowa aplikacje konsolowa. Przejdz do Menedzera Pakietow NuGet, wyszukaj 'SQLite' i zainstaluj pakiet. To zintegrowa biblioteki SQLite z Twoim projektem do operacji bazodanowych.

Jakie sa korzysci z uzywania SQLite w aplikacjach C#?

SQLite to lekki, bezserwerowy silnik bazodanowy przechowujacy dane w pojedynczym pliku, co czyni go idealnym rozwiazaniem dla aplikacji potrzebujacych prostego i efektywnego rozwiazania bazodanowego bez zlozonosci tradycyjnego systemu bazodanowego.

Jak polaczyc sie z baza danych SQLite w C#?

Mozesz polaczyc sie z baza danych SQLite w C# tworząc ciag polaczenia taki jak Data Source=mydatabase.db; i uzywajac klasy SQLiteConnection z przestrzeni nazw System.Data.SQLite do nawiazania i otwarcia polaczenia.

Jak moge wykonac operacje CRUD na bazie danych SQLite uzywajac C#?

Uzywajac polecen SQL, takich jak INSERT, SELECT, UPDATE i DELETE, mozesz wykonac operacje CRUD na bazie danych SQLite w C#. Te polecenia moga byc wykonane przy uzyciu obiektu SQLiteCommand.

Jaka role odgrywaja transakcje w SQLite?

Transakcje w SQLite pozwalaja na wykonanie wielu operacji jako jednej atomowej akcji. Mozesz rozpoczac transakcje uzywajac connection.BeginTransaction(), wykonac niezbedne operacje, a nastepnie zatwierdzic lub wycofac transakcje w zaleznosci od wyniku.

Jak moge uzyc Entity Framework z SQLite w projekcie C#?

Aby uzyc Entity Framework z SQLite, zainstaluj niezbedny pakiet Entity Framework za posrednictwem NuGet, zdefiniuj swoje klasy encji i stworz klase DbContext. Ta konfiguracja pozwala na mapowanie obiektowo-relacyjne, upraszczajac interakcje z baza danych w Twoim projekcie C#.

Jak moge generowac dokumenty PDF z danych bazy danych uzywajac C#?

Za pomoca IronPDF mozesz generowac dokumenty PDF z danych bazy danych w C# poprzez konwersje HTML do PDF. To pozwala na tworzenie dobrze sformatowanych raportow PDF z danych przechowywanych w Twojej bazie danych SQLite.

Jakie narzedzia moga ulepszyc rozwoj aplikacji bazodanowych w C#?

Iron Suit, ktory zawiera narzedzia takie jak IronPDF, IronXL, IronOCR i IronBarcode, ulepsza rozwoj aplikacji bazodanowych w C# oferujac funkcjonalnosci takie jak tworzenie PDF, manipulacja plikami Excel, rozpoznawanie tekstu i generowanie kodow kreskowych.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie