无法通过连接字符串将数据库中的信息添加到表中

时间:2014-08-19 13:25:22

标签: c# sql visual-studio-2012 connection-string

这是一个模糊的问题,但我不完全确定从哪里开始。我试图在线查看资源,但我找不到任何东西。

我正在Visual Studio(C#)中创建一个MVC Web应用程序,我在HTML页面上有表格,我希望从SQL Server中的数据库中的表中填充这些表格。 (它受密码保护,但我可以访问它。)

无论如何,我一直在使用它来尝试从我的Web.config连接到数据库:

<connectionStrings>
<add name="UATConnectionString" connectionString="Data Source=***.***.***.**;Initial    Catalog=********;User ID=******;Password=******* />
</connectionStrings>

然而,一旦我有了,我不确定如何用数据库中的数据实际填充表格。我试过在线查找一些东西,但没有一个对我有用。 :(

我感谢任何帮助。如果你能够尽可能简单地解释事情,我会很感激,因为我仍然熟悉编码。

2 个答案:

答案 0 :(得分:1)

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


protected System.Data.Common.DbProviderFactory m_providerFactory = null;
m_providerFactory = GetFactory();



    public System.Data.IDbConnection GetConnection(string strDb)
    {
        System.Data.Common.DbConnection con = m_providerFactory.CreateConnection ();
        con.ConnectionString = GetConnectionString (strDb);

        return con;
    }




        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


                            /*
                            using (System.Data.SqlClient.SqlDataAdapter daQueryTable = new System.Data.SqlClient.SqlDataAdapter((System.Data.SqlClient.SqlCommand)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);
                            throw;
                        }// End Catch
                        finally
                        {
                            if (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 System.Data.IDbCommand CreateCommand(string strSQL)
    {
        System.Data.IDbCommand idbc = this.m_providerFactory.CreateCommand();
        // idbc.CommandText = string.Format(strSQL, " /* TOP 1 */ ", "OFFSET 0 FETCH NEXT 1 ROWS ONLY");
        idbc.CommandText = strSQL;

        idbc.CommandTimeout = 300;

        return idbc;
    } // End Function CreateCommand

并像这样使用它:

System.Data.DataTable dt = null;

using(System.Data.IDbCommand cmd = CreateCommand("SELECT * FROM YOUR_Table"))
{
      dt = GetDataTable(cmd);
}

你仍然可以添加这个功能:

    public 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

你可以这样做:

System.Data.DataTable dt = GetDataTable("SELECT * FROM YOUR_Table");

要从web / app .config获取连接字符串,您可以使用此功能:

    public static string GetConnectionString()
    {
        return GetConnectionString(null);
    } // End Function GetConnectionString


    protected static string strStaticConnectionString = null;
    public static string GetConnectionString(string strIntitialCatalog)
    {
        string strReturnValue = null;
        string strProviderName = null;


        if (string.IsNullOrEmpty(strStaticConnectionString))
        {
            string strConnectionStringName = System.Environment.MachineName;

            if (string.IsNullOrEmpty(strConnectionStringName))
            {
                strConnectionStringName = "LocalSqlServer";
            }

            System.Configuration.ConnectionStringSettingsCollection settings = System.Configuration.ConfigurationManager.ConnectionStrings;
            if ((settings != null))
            {
                foreach (System.Configuration.ConnectionStringSettings cs in settings)
                {
                    if (StringComparer.OrdinalIgnoreCase.Equals(cs.Name, strConnectionStringName))
                    {
                        strReturnValue = cs.ConnectionString;
                        strProviderName = cs.ProviderName;
                        break; // TODO: might not be correct. Was : Exit For
                    }
                }
            }

            if (string.IsNullOrEmpty(strReturnValue))
            {
                strConnectionStringName = "server";

                System.Configuration.ConnectionStringSettings conString = System.Configuration.ConfigurationManager.ConnectionStrings[strConnectionStringName];

                if (conString != null)
                {
                    strReturnValue = conString.ConnectionString;
                }
            }

            if (string.IsNullOrEmpty(strReturnValue))
            {
                throw new ArgumentNullException("ConnectionString \"" + strConnectionStringName + "\" in file web.config.");
            }

            settings = null;
            strConnectionStringName = null;
        }
        else
        {
            if (string.IsNullOrEmpty(strIntitialCatalog))
            {
                return strStaticConnectionString;
            }

            strReturnValue = strStaticConnectionString;
        }

        InitFactory(strProviderName);
        System.Data.Common.DbConnectionStringBuilder sb = GetConnectionStringBuilder(strReturnValue);


        if (string.IsNullOrEmpty(strStaticConnectionString))
        {
            if (!Convert.ToBoolean(sb["Integrated Security"]))
            {
                sb["Password"] = DES.DeCrypt(System.Convert.ToString(sb["Password"]));
            }
            strReturnValue = sb.ConnectionString;
            strStaticConnectionString = strReturnValue;
        }


        if (!string.IsNullOrEmpty(strIntitialCatalog))
        {
            sb["Database"] = strIntitialCatalog;
        }


        strReturnValue = sb.ConnectionString;
        sb = null;

        return strReturnValue;
    } // End Function GetConnectionString

需要:

    public static System.Data.Common.DbConnectionStringBuilder GetConnectionStringBuilder(string strConnectionString)
    {
        System.Data.Common.DbConnectionStringBuilder dbConString = m_ProviderFactory.CreateConnectionStringBuilder();
        dbConString.ConnectionString = strConnectionString;

        return dbConString;
    } // End Functin GetConnectionStringBuilder

这将获得名为Environment.MachineName的连接字符串,或者名为“server:

的连接字符串
<connectionStrings>
<add name="YOUR_DEV_MACHINE_NAME" connectionString="Data Source=***.***.***.**;Initial    Catalog=********;User ID=******;Password=******* />


<add name="server" connectionString="Data Source=***.***.***.**;Initial    Catalog=********;User ID=******;Password=******* />

</connectionStrings>

这就是你如何正确地做到这一点 与往常一样,不正确地做这件事要容易得多:

    public static System.Data.DataTable LazyGetDataTable()
    {
        System.Data.DataTable dt = new System.Data.DataTable();
        dt.TableName = "lalala - Not really necessary";

        using (System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("SELECT * FROM YOUR_TABLE", "YOUR CONNECTION STRING HERE"))
        {
            da.Fill(dt);
        }

        return dt;
    } // End Function LazyGetDataTable

但如果你这样做,如果你想从Microsoft SQL-Server更改为其他东西,你将不得不重写你的代码。

答案 1 :(得分:0)

有很多方法可以实现这一目标。 您可以使用entity-framework:

Entity Framework

或DataAdapters:

SqlDataADapters

(第二个链接有一个小示例代码)