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...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章