Étape 3 : Preuve de concept pour se connecter à SQL à l’aide d’ADO.NET
- Article précédent :Étape 2 : Créer une base de données SQL pour le développement ADO.NET
- Article suivant :Étape 4 : Connexion résiliente à SQL avec ADO.NET
Cet exemple de code C# doit être considéré comme une preuve de concept uniquement. L’exemple de code est simplifié par souci de clarté et ne représente pas nécessairement les meilleures pratiques recommandées par Microsoft.
1 : Se connecter
La méthode SqlConnection.Open est utilisée pour se connecter à votre base de données SQL.
using System;
using QC = Microsoft.Data.SqlClient;
namespace ProofOfConcept_SQL_CSharp
{
public class Program
{
static public void Main()
{
using (var connection = new QC.SqlConnection(
"Server=tcp:YOUR_SERVER_NAME_HERE.database.windows.net,1433;" +
"Database=AdventureWorksLT;User ID=YOUR_LOGIN_NAME_HERE;" +
"Password=YOUR_PASSWORD_HERE;Encrypt=True;" +
"TrustServerCertificate=False;Connection Timeout=30;"
))
{
connection.Open();
Console.WriteLine("Connected successfully.");
Console.WriteLine("Press any key to finish...");
Console.ReadKey(true);
}
}
}
}
/**** Actual output:
Connected successfully.
Press any key to finish...
****/
2 : Exécuter une requête
La méthode SqlCommand.ExecuteReader :
- Émet l’instruction SQL SELECT sur le système SQL.
- Renvoie une instance de SqlDataReader pour fournir l’accès aux lignes de résultat.
using System;
using DT = System.Data;
using QC = Microsoft.Data.SqlClient;
namespace ProofOfConcept_SQL_CSharp
{
public class Program
{
static public void Main()
{
using (var connection = new QC.SqlConnection(
"Server=tcp:YOUR_SERVER_NAME_HERE.database.windows.net,1433;" +
"Database=AdventureWorksLT;User ID=YOUR_LOGIN_NAME_HERE;" +
"Password=YOUR_PASSWORD_HERE;Encrypt=True;" +
"TrustServerCertificate=False;Connection Timeout=30;"
))
{
connection.Open();
Console.WriteLine("Connected successfully.");
Program.SelectRows(connection);
Console.WriteLine("Press any key to finish...");
Console.ReadKey(true);
}
}
static public void SelectRows(QC.SqlConnection connection)
{
using (var command = new QC.SqlCommand())
{
command.Connection = connection;
command.CommandType = DT.CommandType.Text;
command.CommandText = @"
SELECT
TOP 5
COUNT(soh.SalesOrderID) AS [OrderCount],
c.CustomerID,
c.CompanyName
FROM
SalesLT.Customer AS c
LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh
ON c.CustomerID = soh.CustomerID
GROUP BY
c.CustomerID,
c.CompanyName
ORDER BY
[OrderCount] DESC,
c.CompanyName; ";
QC.SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("{0}\t{1}\t{2}",
reader.GetInt32(0),
reader.GetInt32(1),
reader.GetString(2));
}
}
}
}
}
/**** Actual output:
Connected successfully.
1 29736 Action Bicycle Specialists
1 29638 Aerobic Exercise Company
1 29546 Bulk Discount Store
1 29741 Central Bicycle Specialists
1 29612 Channel Outlet
Press any key to finish...
****/
3 : Insérer une ligne
Cet exemple montre comment :
- Exécutez une instruction SQL INSERT en toute sécurité en passant des paramètres.
- L’utilisation de paramètres protège des attaques par injection SQL.
- Récupérez la valeur générée automatiquement.
using System;
using DT = System.Data;
using QC = Microsoft.Data.SqlClient;
namespace ProofOfConcept_SQL_CSharp
{
public class Program
{
static public void Main()
{
using (var connection = new QC.SqlConnection(
"Server=tcp:YOUR_SERVER_NAME_HERE.database.windows.net,1433;" +
"Database=AdventureWorksLT;User ID=YOUR_LOGIN_NAME_HERE;" +
"Password=YOUR_PASSWORD_HERE;Encrypt=True;" +
"TrustServerCertificate=False;Connection Timeout=30;"
))
{
connection.Open();
Console.WriteLine("Connected successfully.");
Program.InsertRows(connection);
Console.WriteLine("Press any key to finish...");
Console.ReadKey(true);
}
}
static public void InsertRows(QC.SqlConnection connection)
{
QC.SqlParameter parameter;
using (var command = new QC.SqlCommand())
{
command.Connection = connection;
command.CommandType = DT.CommandType.Text;
command.CommandText = @"
INSERT INTO SalesLT.Product
(Name,
ProductNumber,
StandardCost,
ListPrice,
SellStartDate
)
OUTPUT
INSERTED.ProductID
VALUES
(@Name,
@ProductNumber,
@StandardCost,
@ListPrice,
CURRENT_TIMESTAMP
); ";
parameter = new QC.SqlParameter("@Name", DT.SqlDbType.NVarChar, 50);
parameter.Value = "SQL Server Express 2014";
command.Parameters.Add(parameter);
parameter = new QC.SqlParameter("@ProductNumber", DT.SqlDbType.NVarChar, 25);
parameter.Value = "SQLEXPRESS2014";
command.Parameters.Add(parameter);
parameter = new QC.SqlParameter("@StandardCost", DT.SqlDbType.Int);
parameter.Value = 11;
command.Parameters.Add(parameter);
parameter = new QC.SqlParameter("@ListPrice", DT.SqlDbType.Int);
parameter.Value = 12;
command.Parameters.Add(parameter);
int productId = (int)command.ExecuteScalar();
Console.WriteLine("The generated ProductID = {0}.", productId);
}
}
}
}
/**** Actual output:
Connected successfully.
The generated ProductID = 1000.
Press any key to finish...
****/
Commentaires
https://aka.ms/ContentUserFeedback.
Prochainement : Tout au long de l'année 2024, nous supprimerons progressivement les GitHub Issues en tant que mécanisme de retour d'information pour le contenu et nous les remplacerons par un nouveau système de retour d'information. Pour plus d’informations, voir:Soumettre et afficher des commentaires pour