WPF错误"connectionString属性尚未初始化"

NiceGirl13

新成员
已加入
2015年11月19日
留言内容
4
编程经验
Beginner
我创建了一个WPF项目,用户可以在其中将Servername插入文本框中,并将福彩12选5走势图保存在app.config中(在运行时中),将完成后从数据库表中获取的数据加载到datagrid中。当我按下福彩12选5走势图按钮时(在文本框中插入服务器名称之后),我收到以下消息:

2nderror.PNG


代码如下:


App.config


C#:
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
      <connectionStrings>
        <add name="SQLconnectionString"
          connectionString=""
             providerName="System.Data.sqlclient"/>
      </connectionStrings>
    </configuration>

MainWindow.xaml.cs


C#:
    namespace CIA
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }    
   
            private void ButtonConnectServer_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    StringBuilder Con = new StringBuilder("Server=");
                    Con.Append(TextBoxServerName.Text);
                    Con.Append("; Database=SIT-DVH; Trusted_Connection=True;");
                    string strCon = Con.ToString();
                    updateConfigFile(strCon);
                    SqlConnection db = new SqlConnection();
                    ConfigurationManager.RefreshSection("connectionStrings");
                    db.ConnectionString = ConfigurationManager.ConnectionStrings ["SQLconnectionString"].ToString();
                    // if connect to the server and database is there, load values into the datagrid
                    SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Customer_Information",db);
                    DataTable data = new DataTable();
                    sda.Fill(data);
                    DataGridView_Customer_Information.DataContext = data;
                    //or change to this:
                    //DataGridView_Customer_Information.ItemsSource = data.DefaultView;
    
    
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show("Error: \r\n" + ex);
                }
            }
    
            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 connectionStrings
                        xElement.FirstChild.Attributes[2].Value = SQLconnectionString;
                    }                    
                }
    
                //writing the 福彩12选5走势图字符串 into the config file
                XmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
            }
        }
    }
 
Last edited:

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,028
地点
挪威
编程经验
10+
当尚未设置SqlConnection.ConnectionString或将其设置为空字符串时,会发生这种情况。从调试开始:
db.ConnectionString = ConfigurationManager.ConnectionStrings ["SQLconnectionString"].ToString();
此外,代替StringBuilder的还有一个用于此目的的类: SqlConnectionStringBuilder类(System.Data.SqlClient)
 
已加入
2011年4月23日
留言内容
177
地点
密歇根州兰辛;美国
编程经验
10+
我创建了一个WPF项目,用户可以在其中将Servername插入文本框中,并将福彩12选5走势图保存在app.config中(在运行时中),将完成后从数据库表中获取的数据加载到datagrid中。当我按下福彩12选5走势图按钮时(在文本框中插入服务器名称之后),我收到以下消息:

代码如下:

App.config
C#:
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
      <connectionStrings>
        <add name="SQLconnectionString"
          connectionString=""
             providerName="System.Data.sqlclient"/>
      </connectionStrings>
    </configuration>

MainWindow.xaml.cs


C#:
    namespace CIA
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }    
   
            private void ButtonConnectServer_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    StringBuilder Con = new StringBuilder("Server=");
                    Con.Append(TextBoxServerName.Text);
                    Con.Append("; Database=SIT-DVH; Trusted_Connection=True;");
                    string strCon = Con.ToString();
                    updateConfigFile(strCon);
                    SqlConnection db = new SqlConnection();
                    ConfigurationManager.RefreshSection("connectionStrings");
                    db.ConnectionString = ConfigurationManager.ConnectionStrings ["SQLconnectionString"].ToString();
                    // if connect to the server and database is there, load values into the datagrid
                    SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Customer_Information",db);
                    DataTable data = new DataTable();
                    sda.Fill(data);
                    DataGridView_Customer_Information.DataContext = data;
                    //or change to this:
                    //DataGridView_Customer_Information.ItemsSource = data.DefaultView;
    
    
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show("Error: \r\n" + ex);
                }
            }
    
            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 connectionStrings
                        xElement.FirstChild.Attributes[2].Value = con;
                    }                    
                }
    
                //writing the 福彩12选5走势图字符串 into the config file
                XmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
            }
        }
    }
如果要构造福彩12选5走势图字符串,为什么不使用已有的变量并将其传递到SqlConnection中,而不是将其保存到配置文件中,然后再次检索它。我还重新构建了代码,使其更具通用性:
        private DataTable _data = new DataTable();

        private void ButtonConnectServer_Click(object sender, EventArgs e) {
            SqlConnection db = null;
            SqlDataAdapter sda = null;
            try {
                var strCon = string.Format("Server={0}; Database=SIT-DVH; Trusted_Connection=True;", TextBoxServerName.Text.Trim());
                db = new SqlConnection(strCon);
                sda = new SqlDataAdapter("SELECT * FROM Customer_Information", db);

                db.Open();
                updateConfigFile(strCon);

                _data.Clear();
                sda.Fill(_data);
                
                DataGridView_Customer_Information.DataContext = _data;
                
                ConfigurationManager.RefreshSection("connectionStrings");
            }
            catch (Exception ex) {
                MessageBox.Show(string.Format("Error: \n{0}", ex));
            }
            finally {
                if (sda != null)
                    sda.Dispose();

                if (db != null) {
                    db.Close();
                    db.Dispose();
                }
            }
        }
 

NiceGirl13

新成员
已加入
2015年11月19日
留言内容
4
编程经验
Beginner
您好Juggalobrotha,感谢您编辑代码!以及我之所以将其存储在app.config中的原因是因为我希望在服务器窗口中使用connectionstring,并且仅定义connectionstring。我是这样做的一种方法。
 

NiceGirl13

新成员
已加入
2015年11月19日
留言内容
4
编程经验
Beginner
我发现了错误,原因是我使用了旧名称(在con now SQLconnectionString之前), xElement.FirstChild.Attributes [2] .Value = SQLconnectionString;以前 xElement.FirstChild.Attributes [2] .Value = con;
并且应该在以下位置添加字符串:
xElement.FirstChild.Attributes [2] .Value在同一行中没有福彩12选5走势图字符串的地方。所以它添加到福彩12选5走势图字符串之外""。我刚刚对其进行调试,并在bin / debug中检查了app.config,现在已正确设置了值。
 
已加入
2011年4月23日
留言内容
177
地点
密歇根州兰辛;美国
编程经验
10+
您好Juggalobrotha,感谢您编辑代码!以及我之所以将其存储在app.config中的原因是因为我希望在服务器窗口中使用connectionstring,并且仅定义connectionstring。我是这样做的一种方法。
尽管我所做的更改之一是将其存储在配置文件中(尽管不仅通过构造函数设置了ConnectionString属性,而且在福彩12选5走势图成功打开之后也是如此),但我的编辑仍然保留了这一点。更新配置没有任何意义。福彩12选5走势图字符串错误的文件。
 
最佳 底部