代码:
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>
问题是您正在重用
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();
}
我需要在 MauiProgram.cs 中创建构建器的行之后立即添加“builder.Configuration.AddJsonFile("appsettings.json");”。然后就正常了。
appsettings.json 属性已经是 - 嵌入资源 = true;始终复制 = true。
我正在使用 .Net Maui、.Net Framework 8、VS 2022。
我在.NETCore应用程序中遇到了这个问题。 `显然我的
ConnectionString
中有
ConnectionStrings
而不是
appsettings.json
我希望这有帮助。