创建一个简单的Linq数据库应用程序

 Linq是一个新的数据库访问技术,然我们对数据库的操作变得如此简单,不过究竟性能、安全等因素是否达到我们需求?本文,带你入门的同时,分析它的这些本质的东西。

  数据库
  在这个简单的应用程序中,我使用了 SQL Server 2005作为其数据源,当然你也可以使用XML文件。


  让我们从创建AddressBook数据库开始吧

  我在这个数据库里创建了一个叫Addresses的数据表。

  这张表是非常常用的,唯一特殊的是你必须把id字段设为自动增长型的主键,否则它就会是只读的了。

  应用程序

  创建Linq类
  首先,我们简单地使用VS2008创建一个简单的"LINQ to SQL Class",我把它命名为_AddressBook.dbml

  当设计界面出来后,把Addresses表拖到设计面板中,然后把它重新命名为Addresses(点击顶部重命名).

注意,过滤是必须附带filter变量。

  删除一个记录
  
  
protected void GridView1_RowDeleting( object sender, System.Web.UI.WebControls.GridViewDeleteEventArgs e) { int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value); Addresses thisAddress = thisAddressBook.Addresses.First(x => x.id == id); thisAddressBook.Addresses.Remove(thisAddress); thisAddressBook.Addresses.Context.SubmitChanges(); LoadGrid(); }
  插入和删除一个记录
  
  
protected void AddressUpdated( object sender, UserData.UpdateEvent e) { Addresses thisAddress; int id = e.Address.id; // If this value is 0 then add a record if (id != 0 ) thisAddress = thisAddressBook.Addresses.First(x => x.id == id); else thisAddress = new Addresses(); thisAddress.FirstName = e.Address.FirstName; thisAddress.LastName = e.Address.LastName; thisAddress.Address1 = e.Address.Address1; thisAddress.City = e.Address.City; thisAddress.State = e.Address.State; thisAddress.Zip = e.Address.Zip; thisAddress.Email = e.Address.Email; // If this value is 0 then add a record if (id == 0 ) thisAddressBook.Addresses.Add(thisAddress); thisAddressBook.Addresses.Context.SubmitChanges(); LoadGrid(); }
  SQL查询
  在做的过程中,我非常关心其实际在数据库中查询的语句。它究竟会不会把所有的数据都载入,然后再过滤?等等……
不过,我对它的结果是非常满意的。
  
  
-- LOAD语句的结果 Select [ t0 ] . [ id ] , [ t0 ] . [ FirstName ] , [ t0 ] . [ LastName ] , [ t0 ] . [ Address1 ] ,
[ t0 ] . [ City ] , [ t0 ] . [ State ] , [ t0 ] . [ Zip ] , [ t0 ] . [ Email ] FROM [ dbo ] . [ Addresses ] AS [ t0 ]
orDER BY [ t0 ] . [ LastName ] -- 不错,和原始的没什么出入。 过滤语句 exec sp_executesql N ' Select[t0].[id], [t0].[FirstName], [t0].[LastName],
[t0].[Address1], [t0].[City],[t0].[State], [t0].[Zip], [t0].[Email] FROM
[dbo].[Addresses] AS [t0] Where[t0].[LastName] LIKE @p0 orDER BY
[t0].[LastName] ' ,N ' @p0 nvarchar(2) ' , @p0 = N ' H% ' -- 居然,使用了一个存储过程来防止SQL注入,还挺周到:) -- 删除语句 exec sp_executesql N ' Delete FROM[dbo].[Addresses] Where ([id] = @p0) AND
([FirstName] = @p1) AND ([LastName] =@p2) AND ([Address1] = @p3) AND
([City] = @p4) AND ([State] = @p5) AND ([Zip]= @p6) AND ([Email] = @p7) ' ,
N ' @p0 int,@p1 nvarchar(5),@p2 nvarchar(5),@p3nvarchar(15),@p4 nvarchar(10),
@p5 nvarchar(2),@p6 nvarchar(5),@p7 nvarchar(15) ' , @p0 = 4 , @p1 = N ' Kelly ' , @p2 = N ' Smith ' ,
@p3 = N ' 123Fake Street ' , @p4 = N ' Manchester ' , @p5 = N ' NH ' , @p6 = N ' 03102 ' ,
@p7 = N ' kelly@gmail.com ' -- 和上面的一样
  插入语句
  
  
exec sp_executesql N ' Insert INTO[dbo].[Addresses]([FirstName], [LastName],
[Address1], [City], [State], [Zip],[Email]) VALUES (@p0, @p1, @p2, @p3, @p4, @p5,
@p6)Select [t0].[id] FROM[dbo].[Addresses] AS [t0] Where [t0].[id] =
(SCOPE_IDENTITY()) ' ,N ' @p0varchar(7),@p1 varchar(6),@p2 varchar(15),@p3 varchar(9),
@p4 varchar(2),@p5varchar(5),@p6 varchar(18) ' , @p0 = ' John ' , @p1 = ' Smith ' , @p2 = ' 123
FakeStreet ' , @p3 = ' Somewhere ' , @p4 = ' CT ' , @p5 = ' 03102 ' , @p6 = ' nobody@nowhere.com '
插入后,得到了最新插入的key值。
  演示程序

  demo程序是C#写的,编译与VS2008,当然,本文并不是结束,它只是一个简单的入门,期待后续的吧……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值