当前位置:首页 » 存储配置 » linq与存储过程

linq与存储过程

发布时间: 2022-08-31 20:21:43

❶ 有了存储过程,linq to sql还有必要用么

这两者比较比较少

首先使用存储过程就是一个有争议的话题,爱使用存储过程的程序员往往会把过多的业务逻辑封装在存储过程里,导致应用程序的可移植性比较差

而且一般会说使用存储过程的性能比较高,但现在由于各种缓存技术的使用,减少频繁的查询数据库已经是共识。

一般而言使用数据库的存储过程居多还是业务逻辑处理居多基本取决于公司的技术方向,我也见到不少公司是忽视软件的开发,基本处理逻辑都是在数据库中解决的。

至于linq to sql,说句老实话谈不上是什么特别好的技术,仅凭仅能使用sql server数据库这一点,就已经限制了它的发展。看看现在多少公司还在用免费的mysql就知道了,更不要说还有那么多的开源产品是建立在mysql之上。而同类的产品Nhibernate绝不会比它差。

❷ 如何使用LINQ调用存储过程 碰到一个比较棘手的问题,分页存储过程写完以后。在SQL数据库上运行没有问题~

我在这里试了一下,是没有问题的,建议你先写个最简单的存储过程,直接返回这个表的集合,放在linq里看看结果是否正常,然后再添加分页的参数

❸ linq 执行存储过程如何得到返回的结果集

例18-53用一个存储过程返回产品,使用输入参数查询产品的名称价格。存储过程代码如下:
CREATE PROCEDURE dbo.DimProct_By_Class
(@param1 NCHAR(2))
AS
BEGIN
-- SET NOCOUNT ON阻止在结果集中返回显示存储过程影响的行计数消息
SET NOCOUNT ON;
SELECT ProctKey, EnglishProctName, ListPrice, Class from DimProct
as c where c.Class=@param1
END
在Server Explorer展开数据库AdventureWorksDW2008节点,右击Stored Proceres,选择Add New Stored Proceres。窗体打开存储过程文件,将上面的存储过程代码复制到编辑框,如图18-20所示。保存文件,存储过程添加到数据库。
用O/R设计器添加实体类和存储过程的映射。将DimProct表拖到O/R设计器的实体栏,将存储过程拖到方法栏。有关实体类的代码格式前面已经介绍,现在查看映射存储过程的代码。类包含下面的方法:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.DimProct_By_Class")]
public ISingleResult<DimProct_By_ClassResult> DimProct_By_Class(
[global::System.Data.Linq.Mapping.ParameterAttribute(DbType="NChar(2)")] string param1)
{
IExecuteResult result = this.ExecuteMethodCall(this,
((MethodInfo)(MethodInfo.GetCurrentMethod())), param1);
return ((ISingleResult<DimProct_By_ClassResult>)(result.ReturnValue));
}
方法的返回类型ISingleResult<DimProct_By_ClassResult>是O/R设计器根据存储过程的名字自动添加的,如果想要改动返回的数据类型,可在属性栏将存储过程的return属性修改。根据返回类型可以添加查询语句。在Main方法中输入以下代码:
string connectionString =
"Data Source=.;Initial Catalog=AdventureWorksDW2008;Integrated Security=True";
db =
new (connectionString);
ISingleResult<DimProct_By_ClassResult> result = db.DimProct_By_Class("H");
foreach (DimProct_By_ClassResult r in result)
Console.WriteLine("ID:{0}; Name:{1}, ListPrice:{2}, Class:{3}",
r.ProctKey,r.EnglishProctName,r.ListPrice,r.Class);
输出:
ID:238, Name:HL Road Frame - Red 62, ListPrice:1263.4598, Class=H
ID:239, Name:HL Road Frame - Red 62, ListPrice:1301.3636, Class=H
--------------------
th79d:此例中建立存储过程的返回集是语句
ISingleResult<DimProct_By_ClassResult> result = db.DimProct_By_Class("H");
只要知道返回类型就可写查询,返回类型由O/R设计器得出。

❹ 在aspx中如何使用linq调用存储过程

不能直接调用的,你最好在你的datacontex类中增加一个调用的方法:
[Function(Name="dbo.videohot")]
public void Pr_GetSubCategory([Parameter(Name = "videoname",DbType = "varchar(50)")])
{
this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())));
}

❺ 利用LINQ怎么调用存储过程

你用的是linq to sql还是ling to entity?
参见
http://msdn.microsoft.com/zh-cn/library/bb386946.aspx

❻ linq调用的存储过程如何将存储过程返回的表转换成DataTable类型

别用Datatable吧
linq和泛型配合会好一点 如 List<自定义对象>

❼ LINQ执行存储过程的结果问题

象你这样的结构,首先,要生成一个表的实体类,如果你是自动加的LINQTOSQL项目的话,在向导执行完的时候这个实体类应该自动生成了。否则就要自己动手生成。IQueryable<Users> abc = from bcf in the.Users where bcf.HasAd!="" select bcf;
foreach (Users s in abc)
{
Users b = s;
string c = b.HasAd;
}我这里的USER就是我的实体类,具体代码如下,如果自己动手就按下面的代码,LINQ语句不用我解释了吧。[Table(Name="dbo.Users")]
public partial class Users : INotifyPropertyChanging, INotifyPropertyChanged
{

private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

private int _id;

private string _UserName;

private string _UserNameSpell;

private string _ManagerName;

private string _PassWord;

private System.Nullable<int> _UserLevel;

private System.Nullable<int> _UserJob;

private string _UserPopedom;

private string _Mob;

private string _Tel;

private System.Nullable<bool> _Sex;

private System.Nullable<int> _TheCount;

private System.Nullable<System.DateTime> _RegTime;

private string _RegIP;

private string _RegMAC;

private System.Nullable<System.DateTime> _LoginTime;

private string _LoginIP;

private string _LoginMAC;

private System.Nullable<System.DateTime> _LogoutTime;

private string _LogoutIP;

private string _LogoutMAC;

private System.Nullable<int> _TheState;

private string _HasAd;

private System.Nullable<int> _SendTimeType;

private System.Nullable<System.DateTime> _LastSendTime;

private System.Nullable<System.DateTime> _LastFinish;

private System.Nullable<byte> _MsgState;}这里只列出了字段,而且是私有的,这象肯定不行,你或者把这些字段改成公有,或者生成属性

❽ LINQ和存储过程有什么区别

你说关公和秦琼那个厉害?张飞和徐达那个厉害?
------------------------------------------------------------
恭喜你!总算知道我要说什么了!不是一个时期的东西呀!

LINQ TO SQL 只是 一种理念.一种ORM模型, 在CLR运行时进行转化,可以转化为IL, LINQ TO SQL 就可以转化为SQL报文!然后发送给数据库! 这种技术比较新! 07年开始盛行!

cs 代码写 CRUD也是 借用ADO.NET等技术. LINQ TO SQL 底层也是这个!只是高层封装了一些理念. ADO.NET本身也不错!可以直接调用指令, linq to sql 调用原始sql 指令比较麻烦. 有类型转化和安全的限制,所以linq to sql 技术是有弊病的!
cs 借助 ado.net写代码有历史沉积!所以资源多!稳定性也高!
存储过程是数据库提供的技术,跟CLR一点关系也没有. 这个历史更久了! 比net都早!

总结一下吧:
Linq to sql本质实现也是ADO.NET,是一种ORM技术!是一种理念.当然 linq to xml 等是借助CLR集合操作等技术实现. Linq to sql 运行时转化 成SQL报文 .然后发送.
代码中 的CRUD就是 ADO.NET等系列技术实现,代码发送SQL报文

存储过程的实现SQL封存在数据库,所以向数据库发送的只是调用指令. 速度体现在SQL计划编译,
指令网络传输.

到底那个优秀要看你的需要了! 比如你的数据库机器维护成本高!你不可能总让外围指令传入吧!
至少中间有个缓冲层吧! 比如报盘软件,1秒读取数据库 500万次! 靠存储过程提速那就喝西北风去吧!
存储过程如果有bug 那就是数据库灾难,你可知道sqlserver时间类型转化出错后,日志可是不能恢复的.
所以写程序找好层次也是很重要的事情!
以上都是本人所写,没有COPY任何网站的数据. 原稿原创!

❾ linq 中怎样判断存储过程里查到是否有值求大神帮助

首先看你的存储过程是否有结果集,即是否包含SELECT 语句, 如查不包含的话, 你最好在最后加上一句 RETURN @@RowCount 然后,生成的存储过程方法,会返回一个int,是影响数据库行数 如果是SELECT的话,都可以判断,retValue.Count就行 不过这样相当于把数据拿出来,再判断 我建议你还是在存储过程里写一下 IF EXISTS (SELECT * FROM Tbl) BEGIN END 或者 INSERT INTO tbl SELECT * FROM tbl2 WHERE Exists(SELECT * FROM tbl2 WHERE XX) AND XX

热点内容
压缩油19 发布:2025-03-17 12:25:29 浏览:854
linux上网代理 发布:2025-03-17 12:23:56 浏览:357
c是高级语言吗 发布:2025-03-17 12:16:31 浏览:522
python泛型 发布:2025-03-17 12:15:01 浏览:481
编程猫被盗 发布:2025-03-17 12:02:18 浏览:130
海关锁密码箱如何设置新密码 发布:2025-03-17 11:53:50 浏览:559
农业卡号的密码在哪里改 发布:2025-03-17 11:48:57 浏览:966
杨澜超级访问 发布:2025-03-17 11:47:17 浏览:237
数据库无损连接 发布:2025-03-17 11:47:16 浏览:13
memcachephp类 发布:2025-03-17 11:40:04 浏览:829