System.InvalidOperationException:“ConnectionString 属性尚未初始化。” - C#

问题描述 投票:0回答:3

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;

namespace LaboratoryGroupings
{
    public partial class CRUD : Form
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString);
        char action;

        public CRUD() 
        {
            InitializeComponent();
        }

        private void CRUD_Load(object sender, EventArgs e)
        {
            LoadData();
            buttonSetup("enable");
        }

        public void LoadData()
        {
            con.Open();
            using (con)
            {
                SqlDataAdapter sda = new SqlDataAdapter("Select * from tbl_User", con);
                DataTable dt = new DataTable();
                sda.Fill(dt);

                DGUserData.DataSource = dt;
            }

            con.Close();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            con.Open();
            SqlCommand cmd;
            switch (action)
            {
                case 'a':
                    cmd = new SqlCommand("INSERT INTO tbl_User (userName, userPass) Values (@username, @userpass)", con);
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@username", txtUN.Text.Trim());
                    cmd.Parameters.AddWithValue("@userpass", txtPW.Text.Trim());
                    cmd.ExecuteNonQuery();

                    MessageBox.Show("Added new User Successfully!", "User Maintenance", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    break;
                case 'u':
                    break;
                case 'd':
                    break;
            }
            con.Close();
            LoadData();
        }
    }
}

在表单启动时,它工作正常,没有错误,但是当我输入并保存数据时,此错误显示为

con.open();
:

System.InvalidOperationException:'ConnectionString 属性有 尚未初始化。'

我尝试初始化外壳内的

connectionString
,但是
con.Open()
方法中的
LoadData()
这次显示了相同的错误,尽管它启动得很好,没有错误。

这是我的

App.config
的内容,我已经在里面添加了connectionString:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>

    <connectionStrings>
    <add name="dbConnect" connectionString="data source=DESKTOP-UT4DEFE\MSSQLSERVER01; initial catalog=LabDB; 
         integrated security=true" providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>
c# sql connection-string sqlconnection
3个回答
3
投票

问题是您正在重用

SqlConnection
对象,并且您已经处置了它。一旦废弃,就不能再使用。您收到的具体错误是因为连接字符串已被清除,但还会出现其他问题。您可以从 this dotnetfiddle 看到发生了什么。

不得缓存连接对象。当您需要时创建一个新的,立即丢弃。

请注意,

SqlCommand
SqlAdapter
也需要处理,并且
SqlAdapter
会自动为您打开和关闭连接。

     public void LoadData()
     {
         using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString))
         using (var sda = new SqlDataAdapter("Select * from tbl_User", con))
         {
             DataTable dt = new DataTable();
             sda.Fill(dt);

             DGUserData.DataSource = dt;
         }
     }

     private void btnSave_Click(object sender, EventArgs e)
     {
         switch (action)
         {
             case 'a':
                 using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString))
                 using (var cmd = new SqlCommand("INSERT INTO tbl_User (userName, userPass) Values (@username, @userpass)", con)
                 {
                     CommandType = CommandType.Text
                 })
                     cmd.Parameters.Add("@username", SqlDbType.NVarChar, 100).Value = txtUN.Text.Trim();
                     cmd.Parameters.Add("@userpass", SqlDbType.NVarChar, 100).Value = txtPW.Text.Trim();
                     con.Open();
                     cmd.ExecuteNonQuery();
                 }
                 MessageBox.Show("Added new User Successfully!", "User Maintenance", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 break;
             case 'u':
             case 'd':
                 break;
         }
         LoadData();
     }

0
投票

我需要在 MauiProgram.cs 中创建构建器的行之后立即添加“builder.Configuration.AddJsonFile("appsettings.json");”。然后就正常了。

appsettings.json 属性已经是 - 嵌入资源 = true;始终复制 = true。

我正在使用 .Net Maui、.Net Framework 8、VS 2022。


-1
投票

我在.NETCore应用程序中遇到了这个问题。 `显然我的

ConnectionString
 中有 
ConnectionStrings
 而不是 
appsettings.json

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.