C# 只有一个数据库的ASP.net MVC 4?
我使用的是共享数据库解决方案,只能访问一个数据库。我怎样才能使我的MVC应用程序只使用这个1数据库的所有数据?这可能吗 MVC不需要数据库来运行。您可以编写访问数据库的所有代码,因此您可以完全控制它将访问多少数据库。MVC不需要数据库来运行。您可以编写访问数据库的所有代码,因此您可以完全控制它将访问多少数据库。不使用Microsoft提供的任何成员资格、会话和配置文件提供程序,这些提供程序创建了自己的名为aspnet的数据库 需要更改web.config文件 除此之外,StanK是对的,您可以或者说必须自己编写代码。 顺便说一句,如果它不是Sql Server数据库,您可能需要另一个ado.net提供程序,而不是在.net framework中构建的ado.net提供程序 下面是访问数据库的代码示例:C# 只有一个数据库的ASP.net MVC 4?,c#,.net,sql-server,database,C#,.net,Sql Server,Database,我使用的是共享数据库解决方案,只能访问一个数据库。我怎样才能使我的MVC应用程序只使用这个1数据库的所有数据?这可能吗 MVC不需要数据库来运行。您可以编写访问数据库的所有代码,因此您可以完全控制它将访问多少数据库。MVC不需要数据库来运行。您可以编写访问数据库的所有代码,因此您可以完全控制它将访问多少数据库。不使用Microsoft提供的任何成员资格、会话和配置文件提供程序,这些提供程序创建了自己的名为aspnet的数据库 需要更改web.config文件 除此之外,StanK是对的,您可以或
protected System.Data.Common.DbProviderFactory m_providerFactory = null;
protected System.Data.SqlClient.SqlConnectionStringBuilder m_ConnectionString;
public System.Data.Common.DbProviderFactory GetFactory()
{
System.Data.Common.DbProviderFactory providerFactory = null;
providerFactory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient");
return providerFactory;
} // End Function GetFactory
public System.Data.IDbConnection GetConnection()
{
System.Data.SqlClient.SqlConnection sqlc = new System.Data.SqlClient.SqlConnection("ConnectionString");
return sqlc;
} // End Function GetConnection
public System.Data.IDbConnection GetConnection(string strInitialCatalog)
{
if (string.IsNullOrEmpty(strInitialCatalog))
{
return GetConnection();
}
System.Data.SqlClient.SqlConnection sqlc = null;
lock (this.m_ConnectionString)
{
string strOrigInitialCatalog = this.m_ConnectionString.InitialCatalog;
this.m_ConnectionString.InitialCatalog = strInitialCatalog;
sqlc = new System.Data.SqlClient.SqlConnection(this.m_ConnectionString.ConnectionString);
this.m_ConnectionString.InitialCatalog = strOrigInitialCatalog;
strOrigInitialCatalog = null;
}
return sqlc;
}
public override System.Data.IDbCommand CreateCommand()
{
return CreateCommand("");
} // End Function CreateCommand
public override System.Data.IDbCommand CreateCommand(string strSQL)
{
System.Data.IDbCommand idbc = this.m_providerFactory.CreateCommand();
idbc.CommandText = strSQL;
return idbc;
} // End Function CreateCommand
public System.Data.DataTable GetDataTable(System.Data.IDbCommand cmd, string strDb)
{
System.Data.DataTable dt = new System.Data.DataTable();
using (System.Data.IDbConnection idbc = GetConnection(strDb))
{
lock (idbc)
{
lock (cmd)
{
try
{
cmd.Connection = idbc;
using (System.Data.Common.DbDataAdapter daQueryTable = this.m_providerFactory.CreateDataAdapter())
{
daQueryTable.SelectCommand = (System.Data.Common.DbCommand)cmd;
daQueryTable.Fill(dt);
} // End Using daQueryTable
} // End Try
catch (System.Data.Common.DbException ex)
{
//COR.Debug.MsgBox("Exception executing ExecuteInTransaction: " + ex.Message);
Log("cMS_SQL.GetDataTable(System.Data.IDbCommand cmd)", ex, cmd.CommandText);
}// End Catch
finally
{
if (idbc != null && idbc.State != System.Data.ConnectionState.Closed)
idbc.Close();
} // End Finally
} // End lock cmd
} // End lock idbc
} // End Using idbc
return dt;
} // End Function GetDataTable
public override System.Data.DataTable GetDataTable(string strSQL, string strInitialCatalog)
{
System.Data.DataTable dt = null;
using (System.Data.IDbCommand cmd = this.CreateCommand(strSQL))
{
dt = GetDataTable(cmd, strInitialCatalog);
} // End Using cmd
return dt;
} // End Function GetDataTable
用法:
GetDataTable("SELECT * FROM T_User", "DB_NAME");
以及获取非注册提供商的提供商工厂的代码:
public System.Data.Common.DbProviderFactory GetFactory(Type tAssemblyType)
{
return GetFactory(tAssemblyType.AssemblyQualifiedName);
}
public virtual System.Data.Common.DbProviderFactory GetFactory(string assemblyType)
{
#if TARGET_JVM // case insensitive GetType is not supported
Type type = Type.GetType (assemblyType, false);
#else
Type type = Type.GetType(assemblyType, false, true);
#endif
if (type != null && type.IsSubclassOf(typeof(System.Data.Common.DbProviderFactory)))
{
// Provider factories are singletons with Instance field having
// the sole instance
System.Reflection.FieldInfo field = type.GetField("Instance", System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Static);
if (field != null)
{
return (System.Data.Common.DbProviderFactory)field.GetValue(null);
//return field.GetValue(null) as DbProviderFactory;
}
}
throw new System.Configuration.ConfigurationErrorsException("DataProvider is missing!");
//throw new System.Configuration.ConfigurationException("DataProvider is missing!");
} // End Function GetFactory
还有一个获得postgre工厂的例子:
public System.Data.Common.DbProviderFactory GetFactory()
{
//AddFactoryClasses();
System.Data.Common.DbProviderFactory providerFactory = null;
providerFactory = this.GetFactory(typeof(Npgsql.NpgsqlFactory));
return providerFactory;
} // End Function GetFactory
通过不使用Microsoft提供的任何成员资格、会话和配置文件提供程序,这些提供程序创建了自己的名为aspnet的数据库 需要更改web.config文件 除此之外,StanK是对的,您可以或者说必须自己编写代码。 顺便说一句,如果它不是Sql Server数据库,您可能需要另一个ado.net提供程序,而不是在.net framework中构建的ado.net提供程序 下面是访问数据库的代码示例:
protected System.Data.Common.DbProviderFactory m_providerFactory = null;
protected System.Data.SqlClient.SqlConnectionStringBuilder m_ConnectionString;
public System.Data.Common.DbProviderFactory GetFactory()
{
System.Data.Common.DbProviderFactory providerFactory = null;
providerFactory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient");
return providerFactory;
} // End Function GetFactory
public System.Data.IDbConnection GetConnection()
{
System.Data.SqlClient.SqlConnection sqlc = new System.Data.SqlClient.SqlConnection("ConnectionString");
return sqlc;
} // End Function GetConnection
public System.Data.IDbConnection GetConnection(string strInitialCatalog)
{
if (string.IsNullOrEmpty(strInitialCatalog))
{
return GetConnection();
}
System.Data.SqlClient.SqlConnection sqlc = null;
lock (this.m_ConnectionString)
{
string strOrigInitialCatalog = this.m_ConnectionString.InitialCatalog;
this.m_ConnectionString.InitialCatalog = strInitialCatalog;
sqlc = new System.Data.SqlClient.SqlConnection(this.m_ConnectionString.ConnectionString);
this.m_ConnectionString.InitialCatalog = strOrigInitialCatalog;
strOrigInitialCatalog = null;
}
return sqlc;
}
public override System.Data.IDbCommand CreateCommand()
{
return CreateCommand("");
} // End Function CreateCommand
public override System.Data.IDbCommand CreateCommand(string strSQL)
{
System.Data.IDbCommand idbc = this.m_providerFactory.CreateCommand();
idbc.CommandText = strSQL;
return idbc;
} // End Function CreateCommand
public System.Data.DataTable GetDataTable(System.Data.IDbCommand cmd, string strDb)
{
System.Data.DataTable dt = new System.Data.DataTable();
using (System.Data.IDbConnection idbc = GetConnection(strDb))
{
lock (idbc)
{
lock (cmd)
{
try
{
cmd.Connection = idbc;
using (System.Data.Common.DbDataAdapter daQueryTable = this.m_providerFactory.CreateDataAdapter())
{
daQueryTable.SelectCommand = (System.Data.Common.DbCommand)cmd;
daQueryTable.Fill(dt);
} // End Using daQueryTable
} // End Try
catch (System.Data.Common.DbException ex)
{
//COR.Debug.MsgBox("Exception executing ExecuteInTransaction: " + ex.Message);
Log("cMS_SQL.GetDataTable(System.Data.IDbCommand cmd)", ex, cmd.CommandText);
}// End Catch
finally
{
if (idbc != null && idbc.State != System.Data.ConnectionState.Closed)
idbc.Close();
} // End Finally
} // End lock cmd
} // End lock idbc
} // End Using idbc
return dt;
} // End Function GetDataTable
public override System.Data.DataTable GetDataTable(string strSQL, string strInitialCatalog)
{
System.Data.DataTable dt = null;
using (System.Data.IDbCommand cmd = this.CreateCommand(strSQL))
{
dt = GetDataTable(cmd, strInitialCatalog);
} // End Using cmd
return dt;
} // End Function GetDataTable
用法:
GetDataTable("SELECT * FROM T_User", "DB_NAME");
以及获取非注册提供商的提供商工厂的代码:
public System.Data.Common.DbProviderFactory GetFactory(Type tAssemblyType)
{
return GetFactory(tAssemblyType.AssemblyQualifiedName);
}
public virtual System.Data.Common.DbProviderFactory GetFactory(string assemblyType)
{
#if TARGET_JVM // case insensitive GetType is not supported
Type type = Type.GetType (assemblyType, false);
#else
Type type = Type.GetType(assemblyType, false, true);
#endif
if (type != null && type.IsSubclassOf(typeof(System.Data.Common.DbProviderFactory)))
{
// Provider factories are singletons with Instance field having
// the sole instance
System.Reflection.FieldInfo field = type.GetField("Instance", System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Static);
if (field != null)
{
return (System.Data.Common.DbProviderFactory)field.GetValue(null);
//return field.GetValue(null) as DbProviderFactory;
}
}
throw new System.Configuration.ConfigurationErrorsException("DataProvider is missing!");
//throw new System.Configuration.ConfigurationException("DataProvider is missing!");
} // End Function GetFactory
还有一个获得postgre工厂的例子:
public System.Data.Common.DbProviderFactory GetFactory()
{
//AddFactoryClasses();
System.Data.Common.DbProviderFactory providerFactory = null;
providerFactory = this.GetFactory(typeof(Npgsql.NpgsqlFactory));
return providerFactory;
} // End Function GetFactory
我在这里猜测,但是您是否使用Entity Framework进行数据访问,并且希望也使用成员资格提供程序,并且在将成员资格架构与Entity Framework表放在同一数据库中时遇到问题-如果是,请尝试以下方法: 将您已经创建的实体框架或任何其他DB对象保留在正确的位置,然后使用aspnet_regsql.exe指定要在其中创建成员身份架构的数据库 该工具通过命令行或一个漂亮的设置向导为您有效地创建表 请参阅本教程,特别注意题为“步骤2:将SqlMembershipProvider架构添加到数据库”的部分 以下是为方便起见从上述文章中粘贴的重要内容: 步骤2:将SqlMembershipProvider架构添加到数据库 SqlMembershipProvider需要一组特定的表、视图、, 以及要安装在用户存储数据库中的存储过程。 可以使用 aspnet_regsql.exe工具。此文件位于 %WINDIR%\Microsoft.Net\Framework\v2.0.50727\文件夹 注意:aspnet_regsql.exe工具提供两种命令行 功能和图形用户界面。图形界面 更为用户友好,这是我们将在本教程中研究的内容。 当添加 SqlMembershipProvider架构需要自动化,例如在构建中 脚本或自动测试场景 aspnet_regsql.exe工具用于添加或删除ASP.NET 应用程序服务到指定的SQL Server数据库。ASP.NET 应用程序服务包括 SqlMembershipProvider和SqlRoleProvider,以及 其他ASP.NET 2.0框架的基于SQL的提供程序。我们需要 向aspnet_regsql.exe工具提供两位信息: 是否要添加或删除应用程序服务,以及 要从中添加或删除应用程序服务架构的数据库 在提示数据库使用时,aspnet_regsql.exe工具会询问 我们提供数据库所在的服务器的名称 用于连接到数据库和数据库的安全凭据 名称如果您使用的是SQL Server的非Express版本,则 应该已经知道这个信息,因为它是相同的信息 使用时,必须通过连接字符串提供 通过ASP.NET网页访问数据库。确定服务器和 在中使用SQL Server 2005 Express Edition数据库时的数据库名称 然而,App_数据文件夹则更为复杂
我在这里猜测,但是您是否使用Entity Framework进行数据访问,并且希望也使用成员资格提供程序,并且在将成员资格架构与Entity Framework表放在同一数据库中时遇到问题-如果是,请尝试以下方法: 将您已经创建的实体框架或任何其他DB对象保留在正确的位置,然后使用aspnet_regsql.exe指定要在其中创建成员身份架构的数据库 此工具可以有效地创建 您可以通过命令行或一个漂亮的安装向导来完成 请参阅本教程,特别注意题为“步骤2:将SqlMembershipProvider架构添加到数据库”的部分 以下是为方便起见从上述文章中粘贴的重要内容: 步骤2:将SqlMembershipProvider架构添加到数据库 SqlMembershipProvider需要一组特定的表、视图、, 以及要安装在用户存储数据库中的存储过程。 可以使用 aspnet_regsql.exe工具。此文件位于 %WINDIR%\Microsoft.Net\Framework\v2.0.50727\文件夹 注意:aspnet_regsql.exe工具提供两种命令行 功能和图形用户界面。图形界面 更为用户友好,这是我们将在本教程中研究的内容。 当添加 SqlMembershipProvider架构需要自动化,例如在构建中 脚本或自动测试场景 aspnet_regsql.exe工具用于添加或删除ASP.NET 应用程序服务到指定的SQL Server数据库。ASP.NET 应用程序服务包括 SqlMembershipProvider和SqlRoleProvider,以及 其他ASP.NET 2.0框架的基于SQL的提供程序。我们需要 向aspnet_regsql.exe工具提供两位信息: 是否要添加或删除应用程序服务,以及 要从中添加或删除应用程序服务架构的数据库 在提示数据库使用时,aspnet_regsql.exe工具会询问 我们提供数据库所在的服务器的名称 用于连接到数据库和数据库的安全凭据 名称如果您使用的是SQL Server的非Express版本,则 应该已经知道这个信息,因为它是相同的信息 使用时,必须通过连接字符串提供 通过ASP.NET网页访问数据库。确定服务器和 在中使用SQL Server 2005 Express Edition数据库时的数据库名称 然而,App_数据文件夹则更为复杂
对不起,各位,我的新问题,谢谢你们的回答!这是对我有用的东西 首先,让我的DBContext数据模型看起来像 公共类CDBContext:DbContext { 公共数据库集tbl1{get;set;} 公共数据库集tbl2{get;set;} 公共DbSet tbl3{get;set;} 公共DbSet tbl4{get;set;} } 然后,让一个示例表模型如下所示 公共类tbl1 { 公共int ID{get;set;} 公共字符串Var2{get;set;} 公共字符串Var3{get;set;} } 接下来,我使用Add->Controller向导,选择适当的数据模型tbl1和适当的上下文CDBContext。然后,我可以为tbl2、tbl3和tbl4模型执行此操作!每个模型都成为数据库中的一个表,而不是像我以前所做的那样使用整个数据库表
它现在似乎可以工作了,再次感谢 各位,很抱歉这个新问题,谢谢你们的回答!这是对我有用的东西 首先,让我的DBContext数据模型看起来像 公共类CDBContext:DbContext { 公共数据库集tbl1{get;set;} 公共数据库集tbl2{get;set;} 公共DbSet tbl3{get;set;} 公共DbSet tbl4{get;set;} } 然后,让一个示例表模型如下所示 公共类tbl1 { 公共int ID{get;set;} 公共字符串Var2{get;set;} 公共字符串Var3{get;set;} } 接下来,我使用Add->Controller向导,选择适当的数据模型tbl1和适当的上下文CDBContext。然后,我可以为tbl2、tbl3和tbl4模型执行此操作!每个模型都成为数据库中的一个表,而不是像我以前所做的那样使用整个数据库表
它现在似乎可以工作了,再次感谢 替代方案是什么?替代方案是我找到一个允许多个数据库的解决方案。。。我是MVC的新手,所以我不确定上述是否可行。MVC与数据库有什么关系?如果您想使用任意数量的数据库或不使用任何数据库,则由您决定。这都是关于您的业务需求。@ClaySmith-您为什么认为它需要超过1个?在阅读MVC4教程时,您需要为每个业务对象创建一个新的数据库。。。可以用表来代替吗?替代方案是什么?替代方案是我找到一个允许多个数据库的解决方案。。。我是MVC的新手,所以我不确定上述是否可行。MVC与数据库有什么关系?如果您想使用任意数量的数据库或不使用任何数据库,则由您决定。这都是关于您的业务需求。@ClaySmith-您为什么认为它需要超过1个?在阅读MVC4教程时,您需要为每个业务对象创建一个新的数据库。。。有可能这样做吗
表?此外,如果您使用依赖项注入遵循存储库模式,您可以拥有多个存储库,每个存储库与不同的数据存储进行通信。是否有好的资源可以向我展示如何将MVC与表而不是数据库一起使用?MVC4TUT为每个业务对象使用一个新的数据库,谢谢。如果有教程建议您为每个业务对象创建一个新的数据库,我会非常惊讶-我怀疑您可能误解了代码。再看一看教程。另外,如果您使用依赖项注入遵循存储库模式,您可以拥有多个存储库,每个存储库与不同的数据存储进行通信。是否有好的资源可以向我展示如何将MVC与表而不是数据库一起使用?MVC4TUT为每个业务对象使用一个新的数据库,谢谢。如果有教程建议您为每个业务对象创建一个新的数据库,我会非常惊讶-我怀疑您可能误解了代码。再看一看教程。