Micro blog about Answer to the Ultimate Question of Life, the Universe, and Everything
  • Home
    • List all categories
    • Sitemap
  • Downloads
    • WebSphere
    • Hitachi902
    • Hospital
    • Kryptonite
    • OCR
    • APK
  • About me
    • Gallery
      • Italy2022
      • Côte d'Azur 2024
    • Curriculum vitae
      • Resume
      • Lebenslauf
    • Social networks
      • Facebook
      • Twitter
      • LinkedIn
      • Xing
      • GitHub
      • Google Maps
      • Sports tracker
    • Adventures planning
  1. You are here:  
  2. Home

Get types and size from database

Details
Written by: Stanko Milosev
Category: C#
Published: 15 March 2025
Last Updated: 15 March 2025
Hits: 350
Here is a small example of how to display the type and size of fields from a schema table. This example works for MS SQL; I haven't tested it on other databases.
using System;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace GetDbDataTypes
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            string connectionString = "Server=myServer;Database=myDb;Integrated Security=True";
            string query = "SELECT top 1 * FROM [myTable]";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();

                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    command.CommandTimeout = 3600;
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        dataGridView1.DataSource = reader.GetSchemaTable();
                    }
                }
            }
        }
    }
}
Example download from here

Task.Run cannot be canceled immediately

Details
Written by: Stanko Milosev
Category: C#
Published: 08 March 2025
Last Updated: 08 March 2025
Hits: 607
Example:
_cts = new System.Threading.CancellationTokenSource();

int[] sleepConfiguration = [5, 7, 10, 1, 3];

List<Task> sleepingTasks = new List<Task>();
foreach (int sleepSeconds in sleepConfiguration)
{
	Task sleepingTask = Task.Run(() =>
	{
		DoSomethingLong(sleepSeconds);
	}, _cts.Token);

	sleepingTasks.Add(sleepingTask);
}

await Task.WhenAll(sleepingTasks);
MessageBox.Show("Done!");

private void DoSomethingLong(int sleepSeconds)
{
	Thread.Sleep(sleepSeconds * 1000);
}

Add record in Db from Parallel.ForEachAsync and Ef Core

Details
Written by: Stanko Milosev
Category: C#
Published: 01 March 2025
Last Updated: 01 March 2025
Hits: 422
Here one my example to insert new record in DB using entity framework core, and Parallel.ForEachAsync.

First install Microsoft.EntityFrameworkCore, then install Microsoft.EntityFrameworkCore.SqlServer

FileNamesEntity, or how the table in DB looks like:

public class FileNamesTestEntity
{
    [Key] public int Id { get; set; }
    public string? FileName { get; set; }
}
FileNamesTestDbContext:
public class FileNamesTestDbContext : DbContext
{
    public DbSet<FileNamesTestEntity> FileNamesTest { get; set; }
    public FileNamesTestDbContext(DbContextOptions<FileNamesTestDbContext> options) : base(options) { }
}
And the code:
using Microsoft.EntityFrameworkCore;

namespace UpdateOrInsertRecordInDbFromParallelForEachAsync
{
    public partial class Form1 : Form
    {
        private CancellationTokenSource CancellationTokenSource { get; } = new();
        public Form1()
        {
            InitializeComponent();
        }

        private async void btnStartIProgress_Click(object sender, EventArgs e)
        {
            int recordCount = 0;
            IProgress<int> recordCountProgress = new Progress<int>(NumberOfFilesProcessedIProgress);
            IProgress<string> fileNameProgress = new Progress<string>(FileProcessedIProgress);
            int progressStep = 100;

            var options = new DbContextOptionsBuilder<FileNamesTestDbContext>()
                .UseSqlServer("Server=myServer;Database=MyDb;User Id=myUser;Password=myPass;Encrypt=True;TrustServerCertificate=True;")
                .Options;

            await Parallel.ForEachAsync(Directory.EnumerateFiles(textBox1.Text, "*.*", SearchOption.AllDirectories), new ParallelOptions
            {
                CancellationToken = CancellationTokenSource.Token
            }
                , async (fileName, ct) =>
                {
                    await using var dbContext = new FileNamesTestDbContext(options);
                    FileNamesTestEntity fileNamesTestEntity = new FileNamesTestEntity();
                    fileNamesTestEntity.FileName = fileName;
                    dbContext.FileNamesTest.Add(fileNamesTestEntity);
                    await dbContext.SaveChangesAsync(ct);

                    recordCount = Interlocked.Increment(ref recordCount);
                    if (recordCount % progressStep == 0)
                    {
                        fileNameProgress.Report(fileName);
                        recordCountProgress.Report(recordCount);
                    }
                });

            MessageBox.Show("Done!");
        }

        private void FileProcessedIProgress(string fileName)
        {
            lblIProgressUiFileName.Text = fileName;
        }

        private void NumberOfFilesProcessedIProgress(int recordCount)
        {
            lblIProgressUiRecordCount.Text = $"Processed files: {recordCount}";
        }

        private void btnStopIProgress_Click(object sender, EventArgs e)
        {
            CancellationTokenSource.Cancel();
        }
    }
}
Example download from here

Exceptions in Parallel.ForEach, Parallel.ForEachAsync, Task.Run and Task.Run.ContinueWith

Details
Written by: Stanko Milosev
Category: C#
Published: 01 March 2025
Last Updated: 04 March 2025
Hits: 593
First example Task.Run:
Task task1 = Task.Run(() => throw new SystemException("Test exception in Task.Run"));
Task task2 = Task.Run(async () =>
{
	await Task.Delay(1000);
	WriteToTextBox("Completed");
});

try
{
	await Task.WhenAll(task1, task2);
}
catch (Exception ex)
{
	WriteToTextBox(ex.Message);
}
This will output:
Completed
Test exception in Task.Run
Second, Task.Run.ContinueWith, exception will be swallowed:
Task task1 = Task.Run(() => throw new SystemException("Test exception in Task.Run"))
	.ContinueWith(t => WriteToTextBox("ContinueWith exception test"));

Task task2 = Task.Run(async () =>
{
	await Task.Delay(1000);
	WriteToTextBox("Completed");
});

try
{
	await Task.WhenAll(task1, task2);
}
catch (Exception ex)
{
	WriteToTextBox(ex.Message);
}
Output:
ContinueWith exception test
Completed
Parallel.ForEach, exception will be thrown, but not catched outside of Parallel.ForEach, and program will end:
string[] myItems = ["item1", "item2", "item3", "item4", "item5"];

Task task1;
Task task2;

try
{
	Parallel.ForEach(myItems, async void (myItem) =>
	{
		task1 = Task.Run(() => throw new SystemException("Test exception in Task.Run"));
		task2 = Task.Run(async () =>
		{
			await Task.Delay(1000);
			WriteToTextBox(myItem);
		});
		await Task.WhenAll(task1, task2);
	});
}
catch (Exception ex)
{
	WriteToTextBox(ex.Message);
}
Parallel.ForEachAsync:
string[] myItems = ["item1", "item2", "item3", "item4", "item5"];

Task task1;
Task task2;

using CancellationTokenSource cts = new();
CancellationToken token = cts.Token;

try
{
	int i = 0;
	await Parallel.ForEachAsync(myItems, new ParallelOptions
		{
			CancellationToken = token
		}
		, async (myItem, ct) =>
		{
			i = Interlocked.Increment(ref i);
			task1 = Task.Run(() => throw new SystemException($"Test exception in Task.Run {i}"), ct);
			task2 = Task.Run(async () =>
			{
				await Task.Delay(1000, ct);
				WriteToTextBox(myItem);
			}, ct);
			await Task.WhenAll(task1, task2);
		});
}
catch (Exception ex)
{
	WriteToTextBox(ex.Message);
}
Only one exception will be thrown in output:
item4
item2
item1
item5
item3
Test exception in Task.Run 5
Example download from here
  1. Update UI from Parallel.ForEach
  2. Copy CSV file to MS SQL with SqlBulkCopy and IDataReader
  3. Producer-Consumer Pattern
  4. Tasks.Run vs Thread

Subcategories

C#

Azure

ASP.NET

JavaScript

Software Development Philosophy

MS SQL

IBM WebSphere MQ

MySQL

Joomla

Delphi

PHP

Windows

Life

Lazarus

Downloads

Android

CSS

Chrome

HTML

Linux

Eclipse

Page 2 of 164

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10