Asp.net mvc若何使用sql语句对数据库 *** 作,不要使用Ling???

Asp.net mvc若何使用sql语句对数据库 *** 作,不要使用Ling???,第1张

linq在哪里写linq的工具不知道对不合错误坐等年夜神我刚刚看了一下仿佛年夜白了就可以了

至于返回都一样的你用sql语句你就在哪里写sql语句语句一样list

dataset

一样丫用linq

你是想问原理,还是只想学 *** 作。

原理:就是利用反射,进行数据库 *** 作;在你自动生成model时,他自己会维护一个关系;自动插入。

*** 作,就是利用源代码生成器,自动生成,直接用就可以了

由于问题主要是存储过程,以下例子的架构会直接点,Controller直接依赖SqlRepository,而未用到依赖注入。。

所以,架构方面千万不要参考了这个例子。。

费话不多说,先讲数据库。举例的数据库(SQLServer 2008)名为TestDB01,仅有的一张表表名为UserInfo,表有皆不可为空的三个字段,分别为UserID(int),UserName(nvarchar(50)),UserAge(smallint),其有一条记录为UserID:1,UserName:Lcng,UserAge22。

接下来是写在数据库里的存储过程,如下:

USE [TestDB01]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[myProcedure]

@parameter1 int

AS

BEGIN

SET NOCOUNT ON

SELECT * from [UserInfo] where [UserInfo].UserID = @parameter1

END

希望我复制粘贴时没有出错,当然,如果你对存储过程熟悉的话你会发现我的错误,如果有的话。。

存储过程表达的意思在此就不说了(想你应该熟悉存储过程),如果需要,请补充问题。。

接下来就是Visual Studio 2010里的工作了。

新建一个空ASP.NET MVC 2项目,我取的项目名是UsingProcedureInMVC,往项目里加一个名为Repositories的文件夹,此文件夹用来存放对数据库的 *** 作的类,一会儿会讲,先看Models文件夹。

往Models文件夹里加一个名叫Person的类,Person类如下:

public class Person

{

public string PersonName { getset}

public short PersonAge { getset}

}

现在回到Repositories文件夹,往这个文件夹里加一个名叫SqlRepository的类,SqlRepository类如下:

public class SqlRepository

{

private List<Person>personList = new List<Person>()

public List<Person>PersonList

{

get

{

return personList

}

}

public SqlRepository(string connectionString)

{

SqlConnection sqlconn = new SqlConnection(connectionString)

SqlCommand sqlcmd = new SqlCommand("myProcedure", sqlconn)

sqlcmd.CommandType = CommandType.StoredProcedure

SqlDataReader rd

try

{

sqlconn.Open()

sqlcmd.Parameters.Add(new SqlParameter("@parameter1", SqlDbType.Int))

sqlcmd.Parameters["@parameter1"].Value = 1

rd = sqlcmd.ExecuteReader()

while (rd.Read())

{

personList.Add(new Person { PersonAge = (short)rd[2], PersonName = rd[1].ToString() })

}

}

catch (Exception e)

{

throw new Exception(e.Message)

}

finally

{

sqlconn.Close()

}

}

同样,希望我的复制粘贴没有出错。。

希望对于此类需要讲解的只有以下这些内容,如

SqlCommand sqlcmd = new SqlCommand("myProcedure", sqlconn)

sqlcmd.CommandType = CommandType.StoredProcedure

如果你用过ASP.NET WebForm,那么对这两条中的第一条语句你应该很熟悉,相对于ASP.NET WebForm,SqlCommand sqlcmd = new SqlCommand("myProcedure", sqlconn)只是把第一个参数由原来的SQL语句换成了定义在数据库里的存储过程的名字;而第二条语句只是告诉sqlcmd它的命令类型而已。

当然,我还要说的是,其实这根本就是在ASP.NET WebForm可以用的用法,只是我把它放到ASP.NET MVC里举例子了而已。。其实我们完全可以或说应当使用LINQ。。

还有两条要说的语句是

sqlcmd.Parameters.Add(new SqlParameter("@parameter1",SqlDbType.Int))

sqlcmd.Parameters["@parameter1"].Value = 1

要说的是@parameter1就是定义存储过程里的那个参数,这里给这个参数的值为1,它完全可以根据你的需要而变。

接着看Controllers里的HomeController,它唯一的一个action就是Index(),定义如下

public ViewResult Index()

{

SqlRepository sr = new SqlRepository(WebConfigurationManager.ConnectionStrings["connectionString01"].ConnectionString)

return View(sr.PersonList)

}

如果对此有不明之处,请补充问题。。

最后是强类型(类型为List<UsingProcedureInMVC.Models.Person>)的名叫Index的View,主要内容如下

<body>

<div>

<% foreach (var v in Model)

{ %>

Name:<%: v.PersonName %><br />

Age: <%: v.PersonAge %><br />

<% } %>

</div>

</body>

如果你按着这个例子做,显示的结果将会是

Name:Lc

Age: 22

祝你好运(当然,这条是不会显示的)。。

希望可以帮到你,如果还有疑问,请补充问题。

如果这对你有帮助,请标为最佳答案。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9961024.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存