gpt4 book ai didi

c# - ConnectionString 属性尚未初始化。刷新gridView时出现

转载 作者:行者123 更新时间:2023-12-02 17:42:20 25 4
gpt4 key购买 nike

我正在尝试用数据库中的数据填充 dataGridView,它必须在加载表单时以及在单击 refreshButton 时获取数据..

代码如下:

public partial class PhoneBookMainWindow : Form
{
static public string connString = "Server=(local); Database=PhoneBook; Trusted_Connection=TRUE";
public SqlConnection connection = new SqlConnection(connString);
private void btnRefreshPhoneBook_Click(object sender, EventArgs e)
{
SqlCommand command = new SqlCommand("SELECT ID, contactName, jobTitle, currentAddress, workAddress, workPhone, cellPhone FROM ContactsInformations", connection);
try
{
SqlDataAdapter dataAdapter = new SqlDataAdapter();
dataAdapter.SelectCommand = command;
DataTable dataSet = new DataTable();
dataAdapter.Fill(dataSet);
BindingSource bindingSrc = new BindingSource();

bindingSrc.DataSource = dataSet;
dataGridView1.DataSource = bindingSrc;
dataAdapter.Update(dataSet);
}
catch (Exception x)
{
MessageBox.Show(x.Message);
throw;
}

}
}

我在 Form loadingbtn clicking 中使用了相同的代码,它们在执行过程中正常工作,但是当我从数据库中删除一行时出现问题(使用查询通过点击delete btn 然后点击refresh btn 展览来到我的面前。

最佳答案

您似乎面临的问题是您有多个代码块共享同一个 SqlConnection 对象。除了潜在的竞争条件,这意味着他们中的任何一个都可能在另一个人使用它之前尝试处理该对象。

一旦处置,该对象就不再处于您可以使用它的状态。特别是在这种情况下,它不再设置 .ConnectionString

本质上,这正在发生:

  • A类初始化连接
  • 方法A1使用连接
  • 方法A1完成连接并销毁
  • 方法 A2 尝试使用该连接,但不能使用,因为它已被处置

创建 SqlConnection 对象并不是一个特别占用资源的过程,因此最好将其局限在将要使用它的代码的本地范围内。像这样:

using (SqlConnection connection = new SqlConnection(connString))
{
using (SqlCommand command = new SqlCommand("SELECT ID, contactName, jobTitle, currentAddress, workAddress, workPhone, cellPhone FROM ContactsInformations", connection))
{
try
{
SqlDataAdapter dataAdapter = new SqlDataAdapter();
dataAdapter.SelectCommand = command;
DataTable dataSet = new DataTable();
dataAdapter.Fill(dataSet);
BindingSource bindingSrc = new BindingSource();

bindingSrc.DataSource = dataSet;
dataGridView1.DataSource = bindingSrc;
dataAdapter.Update(dataSet);
}
catch (Exception x)
{
MessageBox.Show(x.Message);
throw;
}
}
}

我在这里做了两件事:

  1. SqlConnection 对象是在方法内部创建的,而不是在类级别创建的。这意味着除了这个方法将使用它之外什么都没有。 (所以除了这个方法没有什么可以打破它。)
  2. 我在 using 语句中包装了一些一次性对象,这是处理任何实现 IDisposable 的最佳实践。

关于c# - ConnectionString 属性尚未初始化。刷新gridView时出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19160360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com