C# 只有一个数据库的ASP.net MVC 4?

C# 只有一个数据库的ASP.net MVC 4?,c#,.net,sql-server,database,C#,.net,Sql Server,Database,我使用的是共享数据库解决方案,只能访问一个数据库。我怎样才能使我的MVC应用程序只使用这个1数据库的所有数据?这可能吗 MVC不需要数据库来运行。您可以编写访问数据库的所有代码,因此您可以完全控制它将访问多少数据库。MVC不需要数据库来运行。您可以编写访问数据库的所有代码,因此您可以完全控制它将访问多少数据库。不使用Microsoft提供的任何成员资格、会话和配置文件提供程序,这些提供程序创建了自己的名为aspnet的数据库 需要更改web.config文件 除此之外,StanK是对的,您可以或

我使用的是共享数据库解决方案,只能访问一个数据库。我怎样才能使我的MVC应用程序只使用这个1数据库的所有数据?这可能吗

MVC不需要数据库来运行。您可以编写访问数据库的所有代码,因此您可以完全控制它将访问多少数据库。

MVC不需要数据库来运行。您可以编写访问数据库的所有代码,因此您可以完全控制它将访问多少数据库。

不使用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

通过不使用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为每个业务对象使用一个新的数据库,谢谢。如果有教程建议您为每个业务对象创建一个新的数据库,我会非常惊讶-我怀疑您可能误解了代码。再看一看教程。