注意,过滤是必须附带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(); }
SQL查询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(); }
在做的过程中,我非常关心其实际在数据库中查询的语句。它究竟会不会把所有的数据都载入,然后再过滤?等等……
不过,我对它的结果是非常满意的。
插入语句--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' --和上面的一样
插入后,得到了最新插入的key值。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'
演示程序
demo程序是C#写的,编译与VS2008,当然,本文并不是结束,它只是一个简单的入门,期待后续的吧……