【发布时间】:2013-06-15 21:31:40
【问题描述】:
我有一个 mvc3 应用程序,它有一个自己的数据库。但是我的网站需要从另一个使用自己的数据库的程序中获取数据,并且我还需要运行位于该数据库中的存储过程。
我想知道最好的做法是建立 sql 连接并运行该存储过程并查询这些数据,或者在 mvc3 中有更好的方法来处理这个问题吗?
【问题讨论】:
我有一个 mvc3 应用程序,它有一个自己的数据库。但是我的网站需要从另一个使用自己的数据库的程序中获取数据,并且我还需要运行位于该数据库中的存储过程。
我想知道最好的做法是建立 sql 连接并运行该存储过程并查询这些数据,或者在 mvc3 中有更好的方法来处理这个问题吗?
【问题讨论】:
在 .NET 中执行数据库访问的方法有很多种。如果此其他程序没有为您提供强类型 API 来查询数据库,您可以使用带有 SqlConnection、SqlCommand 的普通 ADO.NET(其中允许您使用 invoke stored procedures ) 或诸如实体框架之类的 ORM。
【讨论】:
在 ASP.NET MVC 中,您应该将数据访问代码放在模型中(即不在视图或控制器中),但除此之外,您可以使用任何您熟悉的数据访问技术。
【讨论】:
正如 Darin 已经说过的,在 .NET 中执行数据库访问的方法有很多。这是我使用 SqlConnection 和 SqlCommand 的示例。当然,这是假设您连接到 SQL Db。
using (SqlConnection con = new SqlConnection(Global.GetConnectionString()))
{
con.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = con;
cmd.CommandText = @"SELECT [ID],[suburb],[state],[postcode],[country],[latitude],[longitude]
FROM [suburbGeocodes]
WHERE ID = @ID";
//include the ID in the command to make the Load() generic
cmd.Parameters.Add(new SqlParameter("@ID", id));
using (SqlDataReader drd = cmd.ExecuteReader(System.Data.CommandBehavior.SingleResult))
{
if (drd.Read())
{
this.Load(drd);
}
}
}
}
连接字符串在 Web.config 文件中。我只是使用我创建的全局对象来形成它。可以从下面的 Web.config 文件中读取
ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
}
而web.config文件中的连接字符串是……
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=datasource;Initial Catalog=databasename;Persist Security Info=True;User ID=user;Password=password" providerName="System.Data.SqlClient" />
</connectionStrings>
【讨论】: