所以,架构方面千万不要参考了这个例子。。
费话不多说,先讲数据库。举例的数据库(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
祝你好运(当然,这条是不会显示的)。。
希望可以帮到你,如果还有疑问,请补充问题。
如果这对你有帮助,请标为最佳答案。
一OracleClient方式,是微软专门针对Oracle数据库开发的引用类库:System.Data.OracleClient.dll命名空间:System.Data.OracleClient
常用类:OracleConnection、OracleCommand、OracleDataAdapter、OracleTransaction、OracleDataReader等
连接字符串:“data source=**user id=**password=**”(注意:可以不指定 provider 驱动)
二OleDb方式
引用类库:System.Data.dll命名空间:System.Data.OleDb
常用类:OleDbConnection、OleDbCommand、OleDbDataAdapter、OleDbTransaction、OleDbDataReader等。
连接字符串:与OracleClient方式相比,要添加一个provider,“provider=MSDAORA.1”
下面是示例,分别用这两种方式实现了相同的功能:连接数据库,并将查询到的数据放到dataSet中。
你直接上asp.net mvc的官方网站就可以了,上面有实例,也有一些项目的简单源码,你可以看看MusicStore的源码,以下是链接,希望对你有帮助。http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)