Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto rychlém startu vytvoříte .NET konzolovou aplikaci s Microsoft.Data.SqlClient 7.1.1.
Začínáte s prázdnou složkou, .NET SDK a databází SQL Server nebo Azure SQL, ke které máte přístup z počítače. Výsledkem je konzolová aplikace, která vytvoří tabulku, vloží dva řádky s parametry a přečte je zpět.
Přitom aplikace:
- Čte svůj připojovací řetězec z proměnné prostředí místo zdrojového kódu.
- Otevírá spojení asynchronně.
- Používá parametry pro každou hodnotu, kterou pošle do databáze.
- Řeší chyby SQL a zrušení operace.
Pro začlenění stejného přístupu k datům do webového API viz Quickstart: Use Microsoft.Data.SqlClient v aplikaci ASP.NET Core. Používá stejnou tabulku.
Předpoklady
- .NET 10 SDK nebo novější podporované .NET SDK. SDK běží na Windows, Linuxu a macOS. SDK také vytváří verzi ukázky pro .NET Framework, která běží pouze ve Windows a vyžaduje .NET Framework 4.8.1. Pro nový vývoj použijte .NET verzi.
- Editor kódu. Můžete používat Visual Studio, Visual Studio Code nebo jakýkoli editor společně s .NET CLI. Tento článek používá .NET CLI.
- Databáze, ke které se můžete připojit. Pokud ji nemáte, vytvořte si ji pomocí následujících možností.
Vytvoření databáze SQL
Vytvořte nebo se připojte k SQL databázi na jedné z následujících platforem:
Oprávnění k databázi
Aplikace vytváří vlastní tabulku, takže nepotřebujete vzorková data. Identita databáze potřebuje oprávnění k připojení, vytváření, vkládání a výběru z tabulky.
Pro SQL databázi v Microsoft Fabric zkopírujte názvy serverů a databází z položky SQL databáze. Nepoužívej SQL analytics endpoint. Identita potřebuje oprávnění ke čtení položky, které může poskytnout role pracovního prostoru nebo oprávnění k položce. Pro více informací viz Autentizace v SQL databázi. SQL autentizace není podporována.
Pro Azure SQL Database nakonfigurujte Microsoft Entra ID autentizaci a přístup k databázi.
Vytvoření projektu
V prázdné složce spusťte tyto příkazy:
dotnet new console --framework net10.0 --name SqlClientQuickstart
cd SqlClientQuickstart
dotnet add package Microsoft.Data.SqlClient --version 7.1.1
dotnet add package Microsoft.Data.SqlClient.Extensions.Azure --version 7.1.1
Balíček rozšíření poskytuje autentizační režimy ovladače Microsoft Entra, například služba Active Directory Default. Pokud vaše aplikace používá pouze SQL autentizaci nebo integrovanou autentizaci Windows, můžete vynechat Microsoft.Data.SqlClient.Extensions.Azure. Když používáte oba balíčky, nechte jejich verze stejné. Pro další možnosti instalace viz Instalace, aktualizace a nasazení Microsoft.Data.SqlClient.
Konfigurujte spojení
Nastavte pro svou databázi SQL_CONNECTION_STRING proměnnou prostředí. Do zdrojového kódu nevkládejte heslo, přístupový token ani připojovací řetězec pro produkční prostředí.
Vyberte jednu z těchto výchozích možností a nahraďte zástupné symboly.
Azure SQL or SQL database in Fabric with Microsoft Entra ID
Přihlaste se s identitou Microsoft Entra, která má přístup k databázi. Pro lokální vývoj použijte vývojářský nástroj, jako je Azure CLI:
az login
Zkopírujte přesný název serveru a databáze z databáze Azure SQL nebo z položky databáze SQL ve Fabric. Pro PowerShell:
$env:SQL_CONNECTION_STRING = 'Server=tcp:<server>,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict;MultiSubnetFailover=true;Connect Timeout=30'
Pro příkazový řádek Bash:
export SQL_CONNECTION_STRING='Server=tcp:<server>,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict;MultiSubnetFailover=true;Connect Timeout=30'
Pro aplikaci hostovanou v Azure udělte její spravované identitě přístup k databázi a poté použijte Authentication=služba Active Directory Managed Identity. Další možnosti najdete v článku Microsoft Entra authentication with Microsoft. Data.SqlClient.
SQL Server s ověřením SQL
Použijte server, port, databázi a přihlašovací jméno pro instanci SQL Server. Následující příklad je pro lokální vývojovou instanci, která nemá důvěryhodný certifikát. Pro PowerShell:
$env:SQL_CONNECTION_STRING = 'Server=tcp:<server>,1433;Database=<database>;User ID=<user-id>;Password=<password>;Encrypt=true;TrustServerCertificate=true;Connect Timeout=30'
Pro příkazový řádek Bash:
export SQL_CONNECTION_STRING='Server=tcp:<server>,1433;Database=<database>;User ID=<user-id>;Password=<password>;Encrypt=true;TrustServerCertificate=true;Connect Timeout=30'
Caution
TrustServerCertificate=true přeskočí validaci serverového certifikátu. Používejte ho pouze s lokální vývojovou instancí, která nemá důvěryhodný certifikát. Pro sdílené nebo produkční instance SQL Server nainstalujte certifikát, kterému klient důvěřuje, použijte název serveru na tomto certifikátu a odstraňte TrustServerCertificate=true. Další informace naleznete v tématu Šifrování a ověření certifikátu v Microsoft.Data.SqlClient.
Pokud vaše prostředí podporuje integrované ověřování systému Windows nebo Kerberos, nahraďte User ID a Password za Integrated Security=true. Požadavky na nastavení najdete v části SQL Server a ověřování systému Windows.
Přidání kódu
Nahraďte obsah Program.cs tímto kódem:
using System.Data;
using Microsoft.Data.SqlClient;
string? connectionString =
Environment.GetEnvironmentVariable("SQL_CONNECTION_STRING");
if (string.IsNullOrWhiteSpace(connectionString))
{
Console.Error.WriteLine(
"Set the SQL_CONNECTION_STRING environment variable.");
return 1;
}
using var cancellation = new CancellationTokenSource();
Console.CancelKeyPress += (_, eventArgs) =>
{
eventArgs.Cancel = true;
cancellation.Cancel();
};
try
{
await using var connection = new SqlConnection(connectionString);
await connection.OpenAsync(cancellation.Token);
const string createTableSql = """
IF OBJECT_ID(N'dbo.SqlClientQuickstart', N'U') IS NULL
BEGIN
CREATE TABLE dbo.SqlClientQuickstart
(
Id int IDENTITY(1, 1) PRIMARY KEY,
Message nvarchar(200) NOT NULL,
CreatedAt datetimeoffset NOT NULL
CONSTRAINT DF_SqlClientQuickstart_CreatedAt
DEFAULT sysdatetimeoffset()
);
END;
""";
await using (var createCommand =
new SqlCommand(createTableSql, connection) { CommandTimeout = 30 })
{
await createCommand.ExecuteNonQueryAsync(cancellation.Token);
}
const string insertSql = """
INSERT INTO dbo.SqlClientQuickstart (Message)
OUTPUT INSERTED.Id
VALUES (@message);
""";
string[] messages =
[
"Hello from Microsoft.Data.SqlClient",
"Parameters keep values out of the SQL text"
];
int firstId = 0;
await using (var insertCommand =
new SqlCommand(insertSql, connection) { CommandTimeout = 30 })
{
SqlParameter messageParameter =
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, 200);
foreach (string message in messages)
{
messageParameter.Value = message;
int id = (int)(await insertCommand.ExecuteScalarAsync(
cancellation.Token))!;
Console.WriteLine($"Inserted row {id}.");
firstId = firstId == 0 ? id : firstId;
}
}
const string querySql = """
SELECT Id, Message, CreatedAt
FROM dbo.SqlClientQuickstart
WHERE Id >= @firstId
ORDER BY Id;
""";
await using var queryCommand =
new SqlCommand(querySql, connection) { CommandTimeout = 30 };
queryCommand.Parameters.Add("@firstId", SqlDbType.Int).Value = firstId;
await using SqlDataReader reader =
await queryCommand.ExecuteReaderAsync(cancellation.Token);
while (await reader.ReadAsync(cancellation.Token))
{
Console.WriteLine(
$"{reader.GetInt32(0)}: {reader.GetString(1)} " +
$"(created {reader.GetDateTimeOffset(2):u})");
}
return 0;
}
catch (OperationCanceledException)
{
Console.Error.WriteLine("The operation was canceled.");
return 2;
}
catch (SqlException ex)
{
Console.Error.WriteLine(
$"SQL error {ex.Number}, connection {ex.ClientConnectionId}: " +
ex.Message);
if (ex.InnerException is not null)
{
Console.Error.WriteLine(ex.InnerException.Message);
}
return 3;
}
Spuštění aplikace
Spuštění aplikace:
dotnet run
Poprvé, když aplikaci spustíte, je tabulka prázdná a výstup vypadá takto:
Inserted row 1.
Inserted row 2.
1: Hello from Microsoft.Data.SqlClient (created 2026-10-20 20:56:10Z)
2: Parameters keep values out of the SQL text (created 2026-10-20 20:56:10Z)
Vaše časová razítka se liší. Každý další běh přidává další dva řádky, takže ID pokračují od posledního běhu.
Pokud se aplikace nemůže připojit, vytiskne SQL chybové číslo, ID připojení klienta, chybovou zprávu a zprávu vnitřní výjimky a poté se ukončí s kódem 3. Pro běžné chyby viz Řešení problémů.
Jak kód funguje
-
OpenAsync,ExecuteNonQueryAsync,ExecuteReaderAsync,ReadAsyncaCancellationTokenvšechny dostávají stejnéExecuteScalarAsync. Stiskněte Ctrl+C pro zrušení probíhající operace. - Příkaz insert se vytvoří jednou a spustí se jednou pro každou zprávu. Mění se pouze hodnota parametru.
- Typy parametrů a velikosti odpovídají sloupcům tabulky. Parametry posílají hodnoty odděleně od SQL textu, což brání tomu, aby tyto hodnoty změnily příkaz, a pomáhá SQL Serveru znovu použít plány dotazů.
-
OUTPUT INSERTED.Idvrátí novou hodnotu identity, takžeExecuteScalarAsyncvrátí ID bez druhého dotazu. -
await usinguvolní příkazy, čtečku a připojení, i když nastane výjimka. Po uvolnění se připojení vrátí do fondu připojení. Verze .NET Frameworku používá blokyusing, protože tyto typy neimplementujíIAsyncDisposablev .NET Frameworku. -
SqlException.Numberidentifikuje chybu aClientConnectionIdvám umožní spárovat selhání klienta se serverovými logy. U selhání spojení na Linuxu a macOS je příčina často pouze vInnerException, například selhání ověření certifikátu za generickýmerror: 35 - An internal exception was caught.
Troubleshoot
| Chyba nebo příznak | Co zkontrolovat | Více informací |
|---|---|---|
The certificate chain was issued by an authority that is not trustedna Windows. V Linuxu a macOS error: 35 - An internal exception was caught, za níž následuje vnitřní výjimka Certificate failed chain validation s UntrustedRoot. |
Klient nevěří serverovému certifikátu, nebo název serveru v připojovací řetězec neodpovídá certifikátu. Nainstalujte důvěryhodný certifikát. Používejte TrustServerCertificate=true pouze s lokální vývojovou instancí. |
Šifrování a ověřování certifikátů v Microsoftu. Data.SqlClient |
SQL error 18456 s Login failed for user |
Uživatelské jméno, heslo nebo název databáze jsou nesprávné, nebo uživatel nemá přístup k databázi. Pro Microsoft Entra ID zkontrolujte, že identita byla přidána jako uživatel databáze. | Průvodce odstraňováním potíží s SqlClient |
A network-related or instance-specific error occurred s error: 26, error: 40, nebo The wait operation timed out. V Linuxu a macOS se při vypršení časového limitu zobrazí SQL error 258 s error: 35, následované vnitřní výjimkou The connection attempt timed out. |
Název serveru nebo port je špatný, server nepřijímá vzdálená TCP připojení, nebo firewall blokuje port. Pro Azure SQL zkontrolujte pravidla serverového firewallu. | Průvodce odstraňováním potíží s SqlClient |
System.ArgumentException: Cannot find an authentication provider for 'ActiveDirectoryDefault' |
Connection string používá autentizační režim služba Active Directory, ale projekt neodkazuje na Microsoft.Data.SqlClient.Extensions.Azure. Přidejte balíček se stejnou verzí jako Microsoft.Data.SqlClient. |
Autentizace Microsoft Entra přechází do balíčku rozšíření v 7.0 |
CS0234: The type or namespace name 'Data' does not exist in the namespace 'Microsoft' |
Projekt neodkazuje na balíček Microsoft.Data.SqlClient. Spusť dotnet add package příkaz ze složky, která obsahuje projektový soubor. |
Nainstalujte, aktualizujte a nasazujte Microsoft. Data.SqlClient |
Obnovit reporty NU1902 nebo NU1903 pro závislý balíček |
Balík, na kterém řidič spoléhá, má zveřejněné upozornění. | Akce, když jsou hlášeny balíčky s známými zranitelnostmi |
Vyčistěte zdroje
Tabulka zůstává ve vaší databázi i po ukončení aplikace. Pokud neplánujete pokračovat s rychlým startem ASP.NET Core, který používá stejnou tabulku, odstraňte ji pomocí libovolného dotazovacího nástroje:
DROP TABLE IF EXISTS dbo.SqlClientQuickstart;
Pak smažte složku projektu. Z nadřazené složky v PowerShellu:
Remove-Item -Recurse -Force SqlClientQuickstart
Pro příkazový řádek Bash:
rm -rf SqlClientQuickstart
Vymažte proměnnou prostředí, aby připojovací řetězec nezůstal ve vaší shell relaci. Pro PowerShell použijte Remove-Item Env:\SQL_CONNECTION_STRING. V Bash spusťte unset SQL_CONNECTION_STRING.
Použijte vzor v aplikaci
Tyto hranice si zachovejte při přesunu ukázky do API, služby, desktopové aplikace nebo úlohy na pozadí:
- Načtěte informace o připojení přes konfigurační systém aplikace.
- Otevřete jedno připojení pro krátkou jednotku práce a pak ho zrušte.
- Předejte průchodné
CancellationTokenotevřené, příkazové a čtecí volání. - Nastavte časové limity příkazů podle daného postupu.
- Používejte parametry pro každou hodnotu, která pochází mimo SQL příkaz.
- Logujte
SqlException.NumberaClientConnectionIdbez logovacích přihlašovacích údajů nebo přístupových tokenů. - Opakování pokusů přidávejte pouze při přechodných selháních a pouze tehdy, když je bezpečné operaci opakovat.