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, která:
- Čte svůj připojovací řetězec z prostředí namísto ze zdrojového kódu.
- Otevírá spojení asynchronně.
- Vytvoří tabulku, pokud neexistuje.
- Vloží řádek s parametrizovaným příkazem.
- Čte řádky pomocí parametrizovaného dotazu.
- Řeší SQL a chyby při rušení.
Příklad používá Microsoft. Data.SqlClient 7.0.3, aktuální stabilní verze.
Předpoklady
Potřebujete sadu .NET 10 SDK nebo novější podporovanou sadu .NET SDK.
Vytvoření databáze SQL
Vytvořte nebo se připojte k SQL databázi na jedné z následujících platforem:
Quickstart vytváří vlastní tabulku, takže vzorová data nejsou potřeba. 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
Spusťte tyto příkazy:
dotnet new console --framework net10.0 --name SqlClientQuickstart
cd SqlClientQuickstart
dotnet add package Microsoft.Data.SqlClient --version 7.0.3
dotnet add package Microsoft.Data.SqlClient.Extensions.Azure --version 7.0.3
Balíček rozšíření poskytuje autentizační režimy Microsoft Entra ID poskytované ovladačem. Aplikace, která používá pouze integrovanou autentizaci Windows nebo SQL autentizaci, může vynechat Microsoft.Data.SqlClient.Extensions.Azure.
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.
Fabric SQL nebo Azure SQL s autentizací bez hesla
Přihlaste se s identitou v Microsoft Entra ID, 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ázvy serverů a databází z položky SQL databáze ve Fabric nebo Azure SQL databázi. 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, která se připojuje k Azure SQL, udělte její spravované identitě přístup k databázi a poté použijte Authentication=služba Active Directory Managed Identity. Pro další možnosti Microsoft Entra ID viz Microsoft Entra ID autentizace.
SQL Server přes TCP
Použijte server, port, databázi a přihlašovací údaje ze svého stávajícího serveru SQL Server nebo z návodu k nastavení, podle kterého jste postupovali. Následující příklad SQL autentizace je pro lokální vývojový kontejner. 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.
Pokud prostředí podporuje integrovanou autentizaci Windows nebo Kerberos, nahraďte User ID a Password .Integrated Security=true Pro požadavky na nastavení viz SQL Server autentizace.
Přidání kódu aplikace
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;
""";
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);
""";
int insertedId;
using (var insertCommand =
new SqlCommand(insertSql, connection) { CommandTimeout = 30 })
{
insertCommand.Parameters.Add(
new SqlParameter("@message", SqlDbType.NVarChar, 200)
{
Value = "Hello from Microsoft.Data.SqlClient"
});
object? result =
await insertCommand.ExecuteScalarAsync(cancellation.Token);
insertedId = Convert.ToInt32(result);
}
const string querySql = """
SELECT Id, Message, CreatedAt
FROM dbo.SqlClientQuickstart
WHERE Id = @id
ORDER BY Id;
""";
using var queryCommand =
new SqlCommand(querySql, connection) { CommandTimeout = 30 };
queryCommand.Parameters.Add(
new SqlParameter("@id", SqlDbType.Int) { Value = insertedId });
await using SqlDataReader reader =
await queryCommand.ExecuteReaderAsync(cancellation.Token);
while (await reader.ReadAsync(cancellation.Token))
{
Console.WriteLine(
$"{reader.GetInt32(0)}: {reader.GetString(1)} " +
$"at {reader.GetDateTimeOffset(2):O}");
}
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);
return 3;
}
Typy parametrů a velikosti odpovídají sloupcům tabulky. Parametry posílají hodnoty odděleně od SQL textu, což zabraňuje změně syntaxe příkazů a pomáhá SQL Server znovu používat plány dotazů.
await using uvolní čtečku i připojení i v případě, že dojde k výjimce. Vyřazení spojení vrací jeho fyzické spojení do poolu místo toho, aby jedno spojení zůstalo otevřené po celou dobu trvání aplikace.
Spuštění aplikace
Spusťte aplikaci:
dotnet run
Aplikace vytiskne řádek, který vložila:
1: Hello from Microsoft.Data.SqlClient at <timestamp>
Hodnota identity a časové razítko se liší v každé databázi.
Pokud spojení selže, použijte SQL chybové číslo a ID klientského připojení z chybového výstupu. Zkontrolujte názvy serverů a databází, přístup do sítě, oprávnění k databázi, nastavení autentizace a konfiguraci certifikátů. Nepřidávejte TrustServerCertificate=true k Azure SQL ani k připojení k produkčnímu prostředí jako obecné řešení problémů s připojením.
Použijte vzor v aplikaci
Tyto hranice si zachovejte při přesunu vzorku do API, služby, desktopové aplikace nebo pracovníka na pozadí:
- Načtěte informace o připojení prostřednictvím konfiguračního systému 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.