えムナウ Blog

えムナウ の なすがまま

目次

Blog 利用状況

ニュース


follow mnow at http://twitter.com


えムナウのプログラミングのページ

INETAJ

書庫

日記カテゴリ

ギャラリ

Linqはすごい? その6

いよいよ Linq to SQL です。
こんなSQLサーバーデータベースとプログラムを作ってみました。

IDENTITYを使ったキーと文字列列2つとtimestampです。
dbmlファイルにテーブルをドロップダウンしただけです。

オプティミスティック同時実行制御をきちんとやっています。
Table1はタイムスタンプがないので、
WHERE ([ID] = @p0) AND ([TEXT1] = @p1) AND ([TEXT2] = @p2)
Table2はタイムスタンプがあるので、
WHERE ([ID] = @p0) AND ([timestamp] = @p1)
timestampの読み直しもきちんと行われています。

今回はすごい技術だってコメントしておきます。

LINQTEST1 

try

{

    Console.WriteLine("TABLE1");

    using (var context = new LinqTestDataContext())

    {

        context.Log = Console.Out;

 

        Console.WriteLine("SELECT");

        var table1query = from a in context.Table_1 select a;

        foreach (var r in table1query)

            Console.WriteLine(r.ID.ToString() + "," + r.TEXT1 + "," + r.TEXT2);

 

        Console.WriteLine("DELETE");

        context.Table_1.DeleteAllOnSubmit(table1query);

        context.SubmitChanges();

 

        Console.WriteLine("INSERT");

        Table_1 record1insert = new Table_1();

        record1insert.TEXT1 = "TEXT11";

        record1insert.TEXT2 = "TEXT12";

        context.Table_1.InsertOnSubmit(record1insert);

        context.SubmitChanges();

 

        Console.WriteLine("UPDATE");

        foreach (var record in table1query)

            record.TEXT1 = "TEXT11X";

        context.SubmitChanges();

    }

    Console.WriteLine("TABLE2");

    using (var context = new LinqTestDataContext())

    {

        context.Log = Console.Out;

 

        Console.WriteLine("SELECT");

        var table2query = from a in context.Table_2 select a;

        foreach (var r in table2query)

            Console.WriteLine(r.ID.ToString() + "," + r.TEXT1 + "," + r.TEXT2);

 

        Console.WriteLine("DELETE");

        context.Table_2.DeleteAllOnSubmit(table2query);

        context.SubmitChanges();

 

        Console.WriteLine("INSERT");

        Table_2 record2insert = new Table_2();

        record2insert.TEXT1 = "TEXT21";

        record2insert.TEXT2 = "TEXT22";

        context.Table_2.InsertOnSubmit(record2insert);

        context.SubmitChanges();

 

        Console.WriteLine("UPDATE");

        foreach (var record in table2query)

            record.TEXT1 = "TEXT21X";

        context.SubmitChanges();

    }

}

catch (Exception ex)

{

    Console.WriteLine(ex.Message);

}

 

【TABLE1】
【SELECT】
SELECT [t0].[ID], [t0].[TEXT1], [t0].[TEXT2]
FROM [dbo].[Table_1] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

9,TEXT11X   ,TEXT12
【DELETE】
SELECT [t0].[ID], [t0].[TEXT1], [t0].[TEXT2]
FROM [dbo].[Table_1] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

DELETE FROM [dbo].[Table_1] WHERE ([ID] = @p0) AND ([TEXT1] = @p1) AND ([TEXT2]
= @p2)
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [9]
-- @p1: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT11X   ]
-- @p2: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT12    ]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

【INSERT】
INSERT INTO [dbo].[Table_1]([TEXT1], [TEXT2])
VALUES (@p0, @p1)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT11]
-- @p1: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT12]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

【UPDATE】
SELECT [t0].[ID], [t0].[TEXT1], [t0].[TEXT2]
FROM [dbo].[Table_1] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

UPDATE [dbo].[Table_1]
SET [TEXT1] = @p3
WHERE ([ID] = @p0) AND ([TEXT1] = @p1) AND ([TEXT2] = @p2)
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [10]
-- @p1: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT11]
-- @p2: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT12]
-- @p3: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT11X]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

【TABLE2】
【SELECT】
SELECT [t0].[ID], [t0].[TEXT1], [t0].[TEXT2], [t0].[timestamp]
FROM [dbo].[Table_2] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

9,TEXT21X   ,TEXT22
【DELETE】
SELECT [t0].[ID], [t0].[TEXT1], [t0].[TEXT2], [t0].[timestamp]
FROM [dbo].[Table_2] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

DELETE FROM [dbo].[Table_2] WHERE ([ID] = @p0) AND ([timestamp] = @p1)
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [9]
-- @p1: Input Timestamp (Size = 8; Prec = 0; Scale = 0) [SqlBinary(8)]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

【INSERT】
INSERT INTO [dbo].[Table_2]([TEXT1], [TEXT2])
VALUES (@p0, @p1)

SELECT [t0].[ID], [t0].[timestamp]
FROM [dbo].[Table_2] AS [t0]
WHERE [t0].[ID] = (SCOPE_IDENTITY())
-- @p0: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT21]
-- @p1: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT22]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

【UPDATE】
SELECT [t0].[ID], [t0].[TEXT1], [t0].[TEXT2], [t0].[timestamp]
FROM [dbo].[Table_2] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

UPDATE [dbo].[Table_2]
SET [TEXT1] = @p2
WHERE ([ID] = @p0) AND ([timestamp] = @p1)

SELECT [t1].[timestamp]
FROM [dbo].[Table_2] AS [t1]
WHERE ((@@ROWCOUNT) > 0) AND ([t1].[ID] = @p3)
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [10]
-- @p1: Input Timestamp (Size = 8; Prec = 0; Scale = 0) [SqlBinary(8)]
-- @p2: Input NChar (Size = 10; Prec = 0; Scale = 0) [TEXT21X]
-- @p3: Input Int (Size = 0; Prec = 0; Scale = 0) [10]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

投稿日時 : 2008年1月30日 16:23

コメントを追加

No comments posted yet.
タイトル
名前
URL
コメント