朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら
ADO.NET Expressionの使い方





DataColumn型のExpressionに数式を書き込むことによって、クライアント側でデータベースから取得したレコード毎に計算をしてその結果をDataGridView等で表示できます。
各レコード毎に数式を書き込むときは、カラム名を使ってどの列かを指定します。
例えば、UnitPriceというカラムとQuantityというカラムから、売上額を出したい場合は、"UnitPrice * Quantity"という文字列で表します。
Expression内で使える関数もありますので、参考資料を参照してみてください。

C#

//SQL Serverの場合はこれを追加
using System.Data.SqlClient;

namespace ADONET_Expression
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            //SQL Serverへの接続情報の設定をします。
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
            //ここではWindows認証を使うに設定します。
            builder.IntegratedSecurity = true;
            builder.InitialCatalog = "AdventureWorks2008";
            //インスタンス名を設定します。
            builder.DataSource = ".\\SQLExpress";
            //接続情報を使ってコネクションを生成します。
            using (SqlConnection conn = new SqlConnection(builder.ConnectionString))
            {
                //SQL文とコネクションを設定します。
                using (SqlCommand cmd = new SqlCommand("SELECT T1.SalesOrderID, OrderQty, UnitPrice, LineTotal, LT FROM Sales.SalesOrderDetail AS T1 INNER JOIN (SELECT SalesOrderID, SUM(LineTotal) AS LT FROM Sales.SalesOrderDetail GROUP BY SalesOrderID) AS T2 ON T1.SalesOrderID = T2.SalesOrderID", conn))
                {
                    //SQL Serverへの橋渡しのアダプターを設定します。
                    SqlDataAdapter sda = new SqlDataAdapter();
                    //SELECTコマンドを設定します。
                    sda.SelectCommand = cmd;
                    //SELECTの実行及びフェッチ
                    sda.Fill(dt);
                    //DataTableに計算式を使うためのカラムを追加する処理
                    DataColumn dc = new DataColumn();
                    //ここでは、小数点以下も使うためにDouble型を指定しましたが、
                    //特にしていなくてもこの場合はよいです。
                    dc.DataType = System.Type.GetType("System.Double");
                    //カラム名を指定します
                    dc.ColumnName = "Percentage";
                    //計算式を設定。
                    //ここでは、各注文ごとの割合を計算します。
                    //桁数を制限するためにConvert関数で整数型に変換しています。
                    dc.Expression = "Convert(10000 * LineTotal / LT, 'System.Int32') / 100";
                    //dc.Expression = "100 * LineTotal / LT";
                    //DataTableにカラムを追加
                    dt.Columns.Add(dc);
                    //グリッドに表示します。
                    dataGridView1.DataSource = dt;
                }
            }
        }
    }
}

        

VB.NET

'SQL Serverなのでこれを設定します。
Imports System.Data.SqlClient
Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim dt As DataTable = New DataTable()
        'SQL Serverへの接続情報の設定をします。
        Dim builder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
        'ここではWindows認証を使うに設定します。
        builder.IntegratedSecurity = True
        builder.InitialCatalog = "AdventureWorks2008"
        'インスタンス名を設定します。
        builder.DataSource = ".\SQLExpress"
        '接続情報を使ってコネクションを生成します。
        Using conn As New SqlConnection(builder.ConnectionString)
            'SQL文とコネクションを設定します。
            Using cmd As New SqlCommand("SELECT T1.SalesOrderID, OrderQty, UnitPrice, LineTotal, LT FROM Sales.SalesOrderDetail AS T1 INNER JOIN (SELECT SalesOrderID, SUM(LineTotal) AS LT FROM Sales.SalesOrderDetail GROUP BY SalesOrderID) AS T2 ON T1.SalesOrderID = T2.SalesOrderID", conn)
                'SQL Serverへの橋渡しのアダプターを設定します。
                Dim sda As SqlDataAdapter = New SqlDataAdapter()
                'SELECTコマンドを設定します。
                sda.SelectCommand = cmd
                'SELECTの実行及びフェッチ
                sda.Fill(dt)
                'DataTableに計算式を使うためのカラムを追加する処理
                Dim dc As DataColumn = New DataColumn()
                'ここでは、小数点以下も使うためにDouble型を指定しましたが、
                '特にしていなくてもこの場合はよいです。
                dc.DataType = System.Type.GetType("System.Double")
                'カラム名を指定します
                dc.ColumnName = "Percentage"
                '計算式を設定。
                'ここでは、各注文ごとの割合を計算します。
                '桁数を制限するためにConvert関数で整数型に変換しています。
                dc.Expression = "Convert(10000 * LineTotal / LT, 'System.Int32') / 100"
                'dc.Expression = "100 * LineTotal / LT"
                'DataTableにカラムを追加
                dt.Columns.Add(dc)
                'グリッドに表示します。
                DataGridView1.DataSource = dt
            End Using
        End Using
    End Sub
End Class
        








良いやや良い普通やや悪い悪い

投稿日時評価コメント