在运行时更改App.config中的连接字符串

时间:2012-04-18 23:14:18

标签: winforms sql-server-2008 c#-4.0 connection-string dataadapter

下面的代码用于在运行时更改App.config中的连接字符串,我发现它here但是此代码在Visual Studio 2010和SQL Server 2008上对我不起作用,我无法打开连接到Northwind数据库。

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace MyNameSpace
{
    public partial class FrmConnectionTest : Form
    {
        public FrmConnectionTest()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //Constructing connection string from the inputs
                StringBuilder Con = new StringBuilder("Data Source=");
                Con.Append(TxtServer.Text);
                Con.Append(";Initial Catalog=");
                Con.Append(TxtDatabase.Text);
                Con.Append(";Integrated Security=SSPI;");
                string strCon = Con.ToString();
                updateConfigFile(strCon);
                //Create new sql connection
                SqlConnection Db = new SqlConnection();
                //to refresh connection string each time else it will use             previous connection string
                ConfigurationManager.RefreshSection("connectionStrings");
                Db.ConnectionString = ConfigurationManager.ConnectionStrings["con"].ToString();
                //To check new connection string is working or not
                SqlDataAdapter da = new SqlDataAdapter("select * from employee");
                DataTable dt = new DataTable();
                da.Fill(dt);
                CmbTestValue.DataSource = dt;
                CmbTestValue.DisplayMember = "EmployeeID";
            }
            catch (Exception E)
            {
                MessageBox.Show(ConfigurationManager.ConnectionStrings["con"].ToString() + ".This is invalid connection", "Incorrect server/Database");
            }
        }
        public void updateConfigFile(string con)
        {
            //updating config file
            XmlDocument XmlDoc = new XmlDocument();
            //Loading the Config file
            XmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
            foreach (XmlElement xElement in XmlDoc.DocumentElement)
            {
                if (xElement.Name == "connectionStrings")
                {
                    //setting the coonection string
                    xElement.FirstChild.Attributes[2].Value = con;
                }
            }
            //writing the connection string in config file
            XmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
        }
    }
}

使用Visual Studio 2010和SQL Server2008,我在下一行遇到了2个错误:

            SqlDataAdapter da = new SqlDataAdapter("select * from employee");
  • 错误1“System.Data.SqlClient.SqlDataAdapter.SqlDataAdapter(System.Data.SqlClient.SqlCommand)”的最佳重载方法匹配具有一些无效参数

  • 错误2参数1:无法从'string'转换为'System.Data.SqlClient.SqlCommand'

这个问题有什么解决方案吗?谢谢。

2 个答案:

答案 0 :(得分:1)

错误告诉您将错误的参数传递给SqlDataAdapter。我认为正确的呼吁是:

SqlDataAdapter da = new SqlDataAdapter("select * from employee", Db); 

修改

看起来您正在从程序中创建连接字符串,将其保存到配置文件中,然后在创建SqlDataAdapter之前从配置文件中读取它。所以,当你调试这一行时:

Db.ConnectionString = ConfigurationManager.ConnectionStrings["con"].ToString();  

仔细检查Db.ConnectionString实际上是否包含连接字符串。

另一件事是打开SQL Server Management Studio并确认可以从那里连接到Northwind数据库。包括/或者在Visual Studio中,打开“服务器资源管理器”窗口并确认您可以通过单击“添加连接”然后将连接属性窗口设置为服务器并下拉组合框以查看它是否填充来创建到Northwind的数据连接你的数据库:

enter image description here

答案 1 :(得分:0)

看看the available constructors of the SqlDataAdapter class

没有构造函数重载只接受SQL字符串 您需要使用其他一个重载。
例如,there is one that needs an SQL String and a SqlConnection object。 要使用它,请更改您的代码:

SqlDataAdapter da = new SqlDataAdapter("select * from employee", Db);

修改

正如BradRem在评论中已经提到的那样,尝试使用不同的连接字符串 如果他的示例不适合您,您可以在http://connectionstrings.com/sql-server-2008找到更多可能的示例。

您的服务器上是否真的有一个名为Northwind的数据库? 当前计算机上的Windows用户是否具有访问数据库的服务器权限? (这就是Integrated Security=SSPI的含义 - 您当前的Windows用户用于访问数据库!)