ASP.NET Core – ADO.NET
前言
自从用 Entity Framework 就再也没有用过 ADO.NET 了. 很多年前写过 基础 ADO.NET 访问MYSQL 与 MSSQL 数据库例子.
今天刚好想做个单侧, 那就顺便翻新一下呗.
安装
dotnet new console -o TestAdoNet
dotnet add package Microsoft.Data.SqlClient
是 Microsoft.Data.SqlClient 而不是 System.Data.SqlClient 哦, 不要搞混了.
而且用 Microsoft.Data.SqlClient 的话 connection string 一定要 TrustServerCertificate, 参考1, 参考2
Connection
namespace TestAdoNet; public class Program { public static async Task Main() { var connectionStringBuilder = new SqlConnectionStringBuilder( $"Server=192.168.1.152;Database=MyDatabase;User Id=username;TrustServerCertificate=True;" ) { Password = "my password" }; using var connection = new SqlConnection(connectionStringBuilder.ConnectionString); await connection.OpenAsync(); } }
记得要 using 哦, using 结束 connect 也会自动 close.
Command
using var command = new SqlCommand { Connection = connection, CommandText = "SELECT * FROM [Products] WHERE [title] = @title", }; command.Parameters.Add(new SqlParameter("@title", "Fly Sticky Pad Type 1"));
防止 SQL Inject 记得用 Parameter 哦
Read Result
using var reader = await command.ExecuteReaderAsync(); while (await reader.ReadAsync()) // loop rows { for (var i = 0; i < reader.FieldCount; i++) // loop columns { var name = reader.GetName(i); var filedType = reader.GetFieldType(i); var value = reader.GetValue(i); } var id = reader.GetInt32("Id"); // get known column value }
Put result into Table
reader 只能读取一轮, 如果想复读可以把它装进 table 里
var table = new DataTable(); table.Load(reader); // 需要强转去 DataRow 和 DataColumn 哦 foreach (DataRow row in table.Rows) // loop rows { foreach (DataColumn column in table.Columns) // loop column { if (column.ColumnName == "id") { row.Field<int>(column); // get by column var cell1 = row.Field<int>(0); // get by index } } foreach (var value in row.ItemArray) // loop cells { } }
其它
以后有用到才写 TODO...