概要:
LinQto SQL的使用非常方便。上个留言板的例子中,我们知道只要添加一个LinQ to SQL classes文件,只要将表拖进.dbml文件,vs就会帮你生成一系列的文件。同样,我们也可以将存储过程拖进.dbml文件。Vs也会帮你生成相应的方法,和新的字段。若你不想让存储过程生成新的字段,ReturnType中你可以选择数据库中表的字段类。
内容:
Vs帮你生成的存储过程代码:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.proc_SelectAdmin")]
publicISingleResult<Admin> proc_SelectAdmin()
{
IExecuteResultresult = this.ExecuteMethodCall(this, ((MethodInfo)
(MethodInfo.GetCurrentMethod())));
return((ISingleResult<Admin>)(result.ReturnValue));
}
此次学习的表Admin:
Login nchar(10) Checked
PWD nchar(10) Checked
User表:
Login nchar(10) Checked
PWD nchar(10) Checked
存储过程:
ALTER PROC [dbo].[proc_DeleUserByLogin]
@Login nchar(10)
AS
delete dbo.[User] where Login=@Login
ALTER PROC [dbo].[proc_InsertUser]
@Login nchar(10),
@PWD nchar(10)
AS
insert into dbo.[User]values(@Login,@PWD)
ALTER PROC [dbo].[proc_SelectAdmin]
AS
SELECT * FROM dbo.Admin
ALTER PROC[dbo].[proc_SelectAdminAndUser]
AS
SELECT * FROM dbo.Admin
SELECT * FROM dbo.[User]
ALTER PROC [dbo].[proc_SelectCountAdminByLogin]
@Login nchar(10),
@count int output
AS
set @count=(SELECT count(*) FROMdbo.Admin where Login=@Login)
ALTER PROC[dbo].[proc_SelectStringAdminByLogin]
@Login nchar(10)
AS
if exists (SELECT 1 FROM dbo.Adminwhere Login=@Login)
return 123
else
return 456
ALTER PROC [dbo].[proc_UpdateAdmin]
@oldLoginnchar(10),
@newLogin nchar(10)
AS
update dbo.Admin set Login=@newLoginwhere Login=@oldLogin
1, 一般查询的存储过程
LQDemo5DBDataContext ctx = newLQDemo5DBDataContext("连接");
GridView1.DataSource =ctx.proc_SelectAdmin();
GridView1.DataBind();
或者我们使用Linq to object查询存储过程的结果:
var ad = from c in ctx.proc_SelectAdmin() where c.Login=="admin" select c;
2, 带参数
int? m=-1;//表示可空的int类型,System.Nullable<T>的简写
ctx.proc_SelectCountAdminByLogin("admin",ref m);
Response.Write(m);
3, 带返回值
Response.Write(ctx.proc_SelectStringAdminByLogin("admin"));
4, 多结果集
//[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.proc_SelectAdminAndUser")]
//publicISingleResult<proc_SelectAdminAndUserResult> proc_SelectAdminAndUser()
//{
// IExecuteResult result = this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())));
// return((ISingleResult<proc_SelectAdminAndUserResult>)(result.ReturnValue));
//}
修改为:
[Function(Name="dbo.proc_SelectAdminAndUser")]
[ResultType(typeof(Admin))]
[ResultType(typeof(User))]
public IMultipleResultsproc_SelectAdminAndUser()
{
IExecuteResult result=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())));
return (IMultipleResults)(result.ReturnValue);
}
使用的时候:
varrusult = ctx.proc_SelectAdminAndUser();
var admin = rusult.GetResult<Admin>();
var user = rusult.GetResult<User>();
注意:系统有时候会自动修改回原内容。
5, 添加数据
//语句和存储过程两种添加
//User us = new User();
//us.Login="usersss";
//us.PWD = "pwdpwd";
//ctx.Users.InsertOnSubmit(us);//没有主键,代码自带增删改不能用
ctx.proc_InsertUser("useraaa","zxxcz");