linq生成sql
A. linq to sql类怎么用
打开VS2010新建控制台应用程序,然后添加LINQ to SQL Class,命名为DbApp.dbml,新建dbml文件之后,可以打开server explorer,建立数据库连接,并将我们新建的表拖到dbml文件中,
2. 可以通过点击dbml文件空白处,按F4显示dbml属性,可以修改Context和生成实体的命名空间
3. 到现在为止VS2010通过工具为我们创建好了数据表对应实体类和数据表操作添,改,删的方法,现在开始实践
B. 如何:显示生成的 SQL (LINQ to SQL)
您可以将此属性与查询、插入、更新和删除命令一起使用。SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]FROM [dbo].[Customers] AS [t0]WHERE [t0].[City] = @p0-- @p0: Input String (Size = 6; Prec = 0; Scale = 0) [London]-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20810. Visual Basic db.Log = Console.Out Dim custQuery = _ From cust In db.Customers _ Where cust.City = "London" _ Select cust ForEach custObj In custQuery Console.WriteLine(custObj.CustomerID) Next C# db.Log = Console.Out; IQueryable<Customer> custQuery = from cust in db.Customers where cust.City == "London" select cust; foreach(Customer custObj in custQuery) { Console.WriteLine(custObj.CustomerID); }
C. LINQ to SQL 和一般的查询语句怎么什么区别
linq是面向对象的sql。也就是说,sql是向关系型数据库的查询,而linq实际上是对内存里的数据的查询。
虽然linq原来是对象查询,但经过ms的努力,可以通过表达式分析与实体到关系的映射(linq
to
sql),把linq转换为sql语句或是对xml的查询(linq
to
xml)。
因此,这种技术就成了对象到数据库记录的一个方便的映射、转化与操作的工具,你再也不必去去根据不同的情况用字符串拼接的办法生成sql,而是专心于对象模型的处理即可,你对于对象的修改最终都会被转换为对应的update,
insert,
delete等sql语句,在你submit时全部提交到数据库中。
综尔言之,linq
to
sql是一个数据库到对象结构的一个中间层,
他把对关系数据的管理转变为对象的操作,屏蔽了麻烦的sql,而且,还可以得到vs强大的智能感知功能的帮助。
D. 如何创建linq to sql
当您要使用语言集成查询 (LINQ) 访问数据库中的数据时,不能直接连接到该数据库。而是应创建表示该数据库及其表的类,然后使用这些类进行数据交互。通过对象关系设计器或运行 SqlMetal.exe 实用工具可生成这些类。有关更多信息,请参见对象关系设计器(O/R 设计器)和代码生成工具 (SqlMetal.exe)。
本主题演示如何在 Web 应用程序中使用 O/R 设计器创建表示 SQL Server 数据库的数据类。
这些数据类必须放置在 Web 应用程序的 App_Code 文件夹或其子文件夹中。如果将数据类包括在 App_Code 的子文件夹中,则会将该子文件夹的名称用作类的命名空间。在此情况下,必须在连接至数据类时提供该命名空间。
使用O/R 设计器时,会自动将用于访问数据库的连接字符串添加到 Web.config 文件中。
创建这些类后,即可使用 LinqDataSource 控件、ObjectDataSource 控件或 LINQ 查询连接它们。
从数据库表中创建类
如果网站上还没有 App_Code 文件夹,请在“解决方案资源管理器”中右击相应的项目,再单击“添加 ASP.NET 文件夹”,然后单击“App_Code”。
右击 App_Code 文件夹,然后单击“添加新项”。
在“已安装的模板”下,选择“LINQ to SQL 类”模板,为 .dbml 文件键入一个名称,然后单击“添加”。
此时将显示“对象关系设计器”窗口。
在“服务器资源管理器”中,将该数据库表拖入“对象关系设计器”窗口。
在设计器窗口中,该表及其列都表示为实体。
保存 .dbml 文件。
这会在 .dbml 文件下面创建一个 .designer.cs 或 .designer.vb 文件。该文件包含一个表示数据库的类和一个表示表的类。该数据库类的无参数构造函数将从 Web.config 文件中读取连接字符串。
E. 如何查看linq生成的sql
linq使用对象的方式来操作数据库。最后根本的还是生成原始的sql。但是对象的方式掩盖了很多原本的sql面貌可能会是我们不明白对应的sql是什么。还好linq可以输出sql语句
DataClassesDataContext dc = new DataClassesDataContext();
这个对象提供的日志功能。就是输出对应的sql语句。在控制台应用程序下。使用dc.console(有误)可以直接输出显示对应的sql语句。
在windonw和web程序下面可以建立一个txt文件日志。把生成的sql记录下来。代码比较简单了
DataClassesDataContext dc = new DataClassesDataContext();
StreamWriter sw = new StreamWriter(Server.MapPath("sqlLog.txt"), true); // Append
dc.Log = sw;
//然后是linq的相关数据操作
sw.Flush();
sw.Close();
就这样对应的sql语句就记录到sqlLog.txt文件中了。
我们可能会发现生成的sql在我们意料之外。呵呵。我的感觉是这样
F. 能把linq中的where里的条件转为sql吗
可以,linq其实也是sql的功能,只是linq和sql的写法不一样,关键字什么的都一样,两个是可以相互转换的。
G. C#中LINQ怎么生成下面那条SQL
通常有三种常用的方法用来追踪由 LINQ To SQL 提供器生成的 SQL 命令:用 DataContext.log ,用 DataContext.GetCommand ,和用 LINQ To SQL 调试平台。
1) 用 DataContext.log
这句代码可以使生成的 SQL 显示在控制台窗口。这个 SQL 可以是查询,插入,更新和删除命令。
=======================================================
db.Log = Console.Out;
=======================================================
附加参考:
http://msdn.microsoft.com/en-us/library/bb386961.aspx
2) 用 DataContext.GetCommand
这个方法提供了有关 LINQ To SQL 生成的 SQL 命令的相关信息,但是它仅仅是获取方法而不影响 DataContext 的状态。请注意以下事项(引自 MSDN 文档):
· 参数必须非空,否则会抛出一个空参数异常。
· 正常的 LINQ 查询转换为 SQL 查询执行抛出异常的申请不能被转换。
· 只有以一个查询命令返回。特别是额外的命令,这是渴望加载命令,不包括在内。
· DataContext 不跟踪用户处理的命令,例如从返回的命令执行的结果不会被追踪,从而不影响 DataContext 的状态。
下面的示例显示 SQL 命令生成的控制台窗口中的 LINQ To SQL 查询。
======================================================
MyDataContextdb = new MyDataContext();
var query = from d in db.Departments select d;
DbCommand dc = db.GetCommand(q);
Console.WriteLine(dc.CommandText);
=======================================================
附加参考:
http://msdn.microsoft.com/en-us/library/bb882652.aspx
3) 用 LINQ To SQL 调试平台
LINQ To SQL 调试平台通过看见在 Visual Studio 调试平台 生成的 SQL 可以帮助我们调试 LINQ to SQL IQueryable<> 查询语句。我们也可以在平台上执行生成的 SQL 语句来检查返回值。
要安装 LINQ to SQL 调试平台,请按照以下步骤:
a) 下载 LINQ to SQL Visualizer.zip 压缩包在 这儿 。
b) 关闭正在与性的各种版本的 visual studio 2008 。
c) 从 .zip 压缩包的 /bin/debug/ 路径复制 SqlServerQueryVisualizer.dll 程序集到本地路径 /Program Files/Microsoft Visual Studio9.0/Common7/Packages/Debugger/Visualizers/ 。
d) 再次启动 Visual Studio2008 。现在我们就可以用 LINQ to SQL 调试平台了。
H. 如何利用LINQ to SQL来访问后台数据库
在这一步中,我们会:
• 生成一个控制台程序
• 生成一个LINQ to SQL类
• 测试连接后台数据库并读取信息In this task, we will
• Create a console application
• Create a LINQ to SQL class in the project
• Validate the database connection by writing some data out to Console
1. 打开Visual Studio 2008:开始 | 所有程序 | Microsoft Visual Studio 2008 | Microsoft Visual Studio 2008
2. 在菜单里,选中文件|新建|项目…
3. 在新建项目对话框中,展开并选中项目类型中的 Visual C# | Windows,在右边的模板中选中控制台应用程序
4. 在名称文本框中填入 CreateDocFromDatabase
5. 在位置文本框中填入c:\HOL\OFCHOL245
6. 保证单选框创建解决方案的目录 没有选中
7. 点击确定按钮
8. 在后面几步里,我们要在项目中加一个Linq to SQL的类,这样我们就可以从数据库中直接提取数据:在解决方案资源管理器中,右击项目CreateDocFromDatabase,在展开的菜单中选择添加 | 新建项
9. 在添加新项对话框中,在类别框中选中Visua C#项,在右边的模板框中选中LINQ to SQL类,在下面的名称文本框中敲入AdventureWorks.dbml作为类的名称,点击添加按钮
10. 如果AdventureWorks.dbml的编辑页面没有自动打开,在解决方案资源管理器中双击AdventureWorks.dbml,其编辑页面就会打开;点击其中的链接服务器资源管理器,在VS左边会弹出服务器资源管理器的窗口
11. 在服务器资源管理器的窗口中,右击数据连接,选中添加连接按钮
12. 如果选择数据源的对话框出现,在选择数据源的对话框中,选中Microsoft SQL Server,点击继续按钮
13. 在添加链接的对话框中,在服务器名的下拉表中填入localhost;
在登录到服务器的区域中,选中单选按钮使用SQL Server身份验证,然后在其下面的用户名文本框中填入sa,在密码文本框中填入pass@word0!;
在连接到一个数据库的区域中,选中单选按钮选择或输入一个数据库名,然后在其下面的下拉表中填入或选中AdventureWorks
点击确定按钮
14. 在服务器资源管理器窗口中,点击树形结构中的+以展开labrownev2009.AdventureWorks.dbo | 表
15. 在展开的labrownev2009.AdventureWorks.dbo的表中,选中以下四个表:Proct, ProctPhoto, ProctProctPhoto, ProctSubcategory;将其拖拉到AdventureWorks.dbml的编辑页面中。如果有警示的对话框出现,点击是即可。(按下键盘Ctrl可同时选中多个表;拖拉的动作可以用按住鼠标右键拖拉来完成)
在AdventureWorks.dbml的编辑页面中会出现四个表关系图
16. Ctrl-S来保存当前的项目
17. 编辑生成项目:在解决方案资源管理器中,右击项目CreateDocFromDatabase,在下拉菜单中选中生成编辑生成应该成功没有错误。
18. 在解决方案资源管理器中,双击Program.cs 打开其程序编辑窗口.
19. 将以下的程序加到method: static void Main(string[] args){}.
AdventureWorksDataContext context = new AdventureWorksDataContext();
var procts = from p in context.Proct select p.Name;
foreach (string name in procts)
{
System.Console.WriteLine(name);
}
System.Console.ReadLine();
你的程序应该和下面程序一样
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CreateDocFromDatabase
{
class Program
{
static void Main(string[] args)
{
AdventureWorksDataContext context = new AdventureWorksDataContext();
var procts = from p in context.Proct select p.Name;
foreach (string name in procts)
{
System.Console.WriteLine(name);
}
System.Console.ReadLine();
}
}
}
备注:可以加入已经编辑好的代码段。在将要加入代码段的位置,点击鼠标右键,选中插入代码段如下图
选中后,在代码段表中选中My Code Snippets | TestConnectToDB
20. 在Visual Studio 2008 中,按F5运行程序,你会看到一个控制台窗口被打开了;在窗口中列出一系列产品名称
21. 在控制台窗口被选中的时候,按任何一个按键来结束程序运行。