经过前面几篇“长片累牍”的介绍,大家应该看得很累,毕竟,那么多的代码,又没有什么实在感——LINQ来LINQ去,都没有跟数据库挂上勾。呵呵,本文里,我们将使用到真正的数据库,而且,在本片里,大家可以看到比较多的图片了——虽然,只是屏幕截图而已。本片介绍怎样应用LINQ与SQL Server数据库连接并查询出数据。
首先,给出一段数据库脚本,把数据库建立起来,并且插入测试数据——是不是有一种被骗的感觉?又是大片的代码^_^先忍一忍,忍忍,贴到查询分析器里运行就行了。注意根据自己的机器情况,修正一下数据库文件创建的位置。
Code
CREATE DATABASE [DemoDb] ON PRIMARY
( NAME = N'DemoDb', FILENAME = N'C:\MSSQLDATA\DATA\DemoDb.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
LOG ON
( NAME = N'DemoDb_log', FILENAME = N'C:\MSSQLDATA\DATA\DemoDb_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'DemoDb', @new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [DemoDb].[dbo].[sp_fulltext_database] @action = 'disable'
end
GO
ALTER DATABASE [DemoDb] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [DemoDb] SET ANSI_NULLS OFF
GO
ALTER DATABASE [DemoDb] SET ANSI_PADDING OFF
GO
ALTER DATABASE [DemoDb] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [DemoDb] SET ARITHABORT OFF
GO
ALTER DATABASE [DemoDb] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [DemoDb] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [DemoDb] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [DemoDb] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [DemoDb] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [DemoDb] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [DemoDb] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [DemoDb] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [DemoDb] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [DemoDb] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [DemoDb] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [DemoDb] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [DemoDb] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [DemoDb] SET READ_WRITE
GO
ALTER DATABASE [DemoDb] SET RECOVERY FULL
GO
ALTER DATABASE [DemoDb] SET MULTI_USER
GO
ALTER DATABASE [DemoDb] SET PAGE_VERIFY CHECKSUM
GO
USE [DemoDb]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [DemoDb] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO
if exists (select 1
from sysobjects
where id = object_id('NotebookStorage')
and type = 'U')
drop table NotebookStorage
go
/**//*==============================================================*/
/**//* Table: NotebookStorage */
/**//*==============================================================*/
create table NotebookStorage (
Id int identity,
Brand nvarchar(20) not null,
Type nvarchar(20) not null,
Price decimal(9,2) not null,
Weight decimal(10,1) not null,
constraint PK_NOTEBOOKSTORAGE primary key (Id)
)
go
INSERT NotebookStorage (Brand, Price, [Type], Weight) VALUES ('Lenovo',16000,'T61',2.3);
INSERT NotebookStorage (Brand, Price, [Type], Weight) VALUES ('HP',8000,'V3742TU',2.5);
INSERT NotebookStorage (Brand, Price, [Type], Weight) VALUES ('HP',5399, 'HP520',2.4);
INSERT NotebookStorage (Brand, Price, [Type], Weight) VALUES ('DELL',8900,'D630',2.6);
GO
SELECT * FROM NOTEBOOKSTORAGE
运行完,就应该可以看到相应的数据已经在数据库中了:
好,准备工作完成,接下来,我们来按部就搬的进行LINQ TO SQL。
第一步,建立数据库连接。
打开VS中的服务器窗口,右击选择“添加连接...”,填写SQL服务器信息,测试连接,成功,OK~见下图:
第二步 创建LINQ to SQL类:
新建一个Console Application项目,打开项目窗口,在项目上右击,点击“添加新项目”,然后选择“LINQ to SQL Classes”:
新建以后,便会建立一个OR设计器,然后,再次打开服务器窗口,打开刚才建立的连接,从右边把表格“拖”进主工作区,一个表到对象的映射就做完了。
第三步:查询
切换到Module1.vb,输入以下代码:
1
Module Module1
Module Module1
2 Sub Main()Sub Main()
3 Dim db = New NbStorageDataContext()
4 Dim var = From laptop In db.NotebookStorages
5
6 For Each alaptop In var
7 Console.WriteLine(alaptop.ToString())
8 Next
9 End Sub
10End Module
让我们来仔细看一下本文中目前为止唯一出现的VB.NET代码吧:-)
首先,第3行,我们声明了一个NbStorageDataContext类型的对象db。呀?NbStorageDataContext是哪儿冒出来的呀?呵呵,那是第二步里创建的LINQ to SQL的类的名称+DataContext形成的一个类。用它创建的对象db就像一个数据库副本。当然,大家到属性窗口里找一下就知道,这个只是默认名称而已,其值是可以修改的。这一行,我们完成了LINQ查询的Step1,即确立了数据源。
第4行里,In后面带出的数据源是db.NotebookStorages,指向了NotebookStorage表中的数据的集合。这一行完成了LINQ查询中的Step2,设计好了查询。这个时候,数据尚未真正取出。
第6-8行,当然还是老套路啦:执行查询,取出数据,并且输出到屏幕上。
大家如果照着本文一步一步做,贴上这一段代码后,可以看到输出结果………………完全不是预期的那样。
呵呵,其实查询本身到这里已经没有问题了。输出结果不一样是因为alaptop.ToString()输出的东西不是我们所想要的啦。还记得在Notebook类里,我们重写的ToString()方法以获得想要的输出内容,我们甚至还对String作了扩展方法来增加输出的格式(不知道?请回顾前文!^_^)。在这里,我们可以重写NotebookStoreage类,注意啊,是单数形式的哦。其实就是表所对应的类。嗯,具体做法是:在OR设计器上右击表,注意,一定要点在对应的表上哦,不然,后果自负!然后,选择“代码”,就可以看到一个Partial Class,在这里,我们就可以做一个.ToString()的重写了:
1
Partial
Public
Class NotebookStorage
Class NotebookStorage
2 Public Overrides Function ToString()Function ToString() As String
3 Return "Laptop " & Me.Brand & "(" & Me.Type & ") is " & Me.Weight.ToString() _
4 & "kg, and at the price of " & Me.Price.ToString(0.0)
5 End Function
6End Class
当当当当当当当~麻烦大家再次按下F5,看看,有没有得到对应的查询结果——是不是跟预想中的一模一样啊~
让我们来小结一下创建LINQ to SQL的三个步骤——又是三步:
1. 建立数据库连接
2. 创建LINQ to SQL类
3. 查询
通过这三步,大家就应该都能够顺利的从SQL SERVER数据库中获取数据了。
再让偶来啰嗦三句以结束本文。上一句这一句和下一句。本文到此结束,谢谢大家的捧场~