zl程序教程

您现在的位置是:首页 >  后端

当前栏目

ASP.NET Core – ADO.NET

2023-09-27 14:23:55 时间

前言

自从用 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...