C# 连接没有关闭。连接';的当前状态是打开的。(错误)
连接没有关闭。连接的当前状态为“打开”。(错误) 这是我的错误。 这里有一张照片: 是的,我做了一个连接字符串,但它在我的公共部分类中 如果有人在说我使用的语言:荷兰语:) 这是我的代码:C# 连接没有关闭。连接';的当前状态是打开的。(错误),c#,database,connection,C#,Database,Connection,连接没有关闭。连接的当前状态为“打开”。(错误) 这是我的错误。 这里有一张照片: 是的,我做了一个连接字符串,但它在我的公共部分类中 如果有人在说我使用的语言:荷兰语:) 这是我的代码: private void btnOpslaanwerknemergegevens_Click(object sender, EventArgs e) { SqlCommand scmdNaam, scmdVoornaam, scmdStraat, scmdHuisnr, scmdPo
private void btnOpslaanwerknemergegevens_Click(object sender, EventArgs e)
{
SqlCommand scmdNaam, scmdVoornaam, scmdStraat, scmdHuisnr, scmdPostcode, scmdGemeente, scmdBurgerlijkestand, scmdGeboorte_datum, scmdKinderen_ten_laste, scmdAfdeling, scmdIn_dienst_sinds, scmdGewest, scmdMinder_valide, scmdMinder_valide_partner, scmdMinder_valide_kinderen, scmdInkomen_partner, scmdEmail, scmdTel_nr, scmdGsm_nr;
// new sqlcommands
scmdNaam = new SqlCommand();
scmdVoornaam = new SqlCommand();
scmdStraat = new SqlCommand();
scmdHuisnr = new SqlCommand();
scmdPostcode = new SqlCommand();
scmdGemeente = new SqlCommand();
scmdBurgerlijkestand = new SqlCommand();
scmdGeboorte_datum = new SqlCommand();
scmdKinderen_ten_laste = new SqlCommand();
scmdAfdeling = new SqlCommand();
scmdIn_dienst_sinds = new SqlCommand();
scmdGewest = new SqlCommand();
scmdMinder_valide = new SqlCommand();
scmdMinder_valide_kinderen = new SqlCommand();
scmdMinder_valide_partner = new SqlCommand();
scmdInkomen_partner = new SqlCommand();
scmdEmail = new SqlCommand();
scmdTel_nr = new SqlCommand();
scmdGsm_nr = new SqlCommand();
//sqlcommand.connections
scmdNaam.Connection = loonberekening;
scmdVoornaam.Connection = loonberekening;
scmdStraat.Connection = loonberekening;
scmdHuisnr.Connection = loonberekening;
scmdPostcode.Connection = loonberekening;
scmdGemeente.Connection = loonberekening;
scmdBurgerlijkestand.Connection = loonberekening;
scmdGeboorte_datum.Connection = loonberekening;
scmdKinderen_ten_laste.Connection = loonberekening;
scmdAfdeling.Connection = loonberekening;
scmdIn_dienst_sinds.Connection = loonberekening;
scmdGewest.Connection = loonberekening;
scmdMinder_valide.Connection = loonberekening;
scmdMinder_valide_kinderen.Connection = loonberekening;
scmdMinder_valide_partner.Connection = loonberekening;
scmdInkomen_partner.Connection = loonberekening;
scmdEmail.Connection = loonberekening;
scmdTel_nr.Connection = loonberekening;
scmdTel_nr.Connection = loonberekening;
scmdNaam.CommandText = "UPDATE werknemer SET naam = \'" + txtNaam.Text + "\' WHERE ID = \'" + _id + "\'";
scmdVoornaam.CommandText = "UPDATE werknemer SET voornaam = \'" + txtVoornaam.Text + "\' WHERE ID = \'" + _id + "\'";
scmdStraat.CommandText = "UPDATE werknemer SET straat = \'" + txtStraat.Text + "\' WHERE ID = \'" + _id + "\'";
scmdHuisnr.CommandText = "UPDATE werknemer SET huisnr = \'" + txtStraatnr.Text + "\' WHERE ID = \'" + _id + "\'";
scmdPostcode.CommandText = "UPDATE werknemer SET postcode = \'" + txtPostcode.Text + "\' WHERE ID = \'" + _id + "\'";
scmdGemeente.CommandText = "UPDATE werknemer SET gemeente = \'" + txtGemeente.Text + "\' WHERE ID = \'" + _id + "\'";
scmdBurgerlijkestand.CommandText = "UPDATE werknemer SET burgerlijkestand = \'" + cbxStand.Text + "\' WHERE ID = \'" + _id + "\'";
scmdGeboorte_datum.CommandText = "UPDATE werknemer SET geboorte_datum = \'" + txtGeboortedatum.Text + "\' WHERE ID = \'" + _id + "\'";
scmdKinderen_ten_laste.CommandText = "UPDATE werknemer SET kinderen_ten_laste = \'" + txtKinderentenlaste.Text + "\' WHERE ID = \'" + _id + "\'";
scmdAfdeling.CommandText = "UPDATE werknemer SET afdeling = \'" + txtAfdeling.Text + "\' WHERE ID = \'" + _id + "\'";
scmdIn_dienst_sinds.CommandText = "UPDATE werknemer SET in_dienst_sinds = \'" + txtIndien.Text + "\' WHERE ID = \'" + _id + "\'";
scmdGewest.CommandText = "UPDATE werknemer SET Gewest = \'" + cbxGewest.Text + "\' WHERE ID = \'" + _id + "\'";
scmdMinder_valide.CommandText = "UPDATE werknemer SET minder_valide= \'" + cbxValide.Text + "\' WHERE ID = \'" + _id + "\'";
scmdMinder_valide_kinderen.CommandText = "UPDATE werknemer SET minder_valide_kinderen = \'" + txtHoeveelvalidekinderen.Text + "\' WHERE ID = \'" + _id + "\'";
scmdMinder_valide_partner.CommandText = "UPDATE werknemer SET minder_valide_partner = \'" + cbxPartner.Text + "\' WHERE ID = \'" + _id + "\'";
scmdInkomen_partner.CommandText = "UPDATE werknemer SET inkomen_partner = \'" + txtInkomenpartner.Text + "\' WHERE ID = \'" + _id + "\'";
scmdEmail.CommandText = "UPDATE werknemer SET [e-mail] = \'" + txtEmail.Text + "\' WHERE ID = \'" + _id + "\'";
scmdTel_nr.CommandText = "UPDATE werknemer SET tel_nr = \'" + txtTelefoonnr.Text + "\' WHERE ID = \'" + _id + "\'";
scmdGsm_nr.CommandText = "UPDATE werknemer SET gsm_nr = \'" + txtGsmNr.Text + "\' WHERE ID = \'" + _id + "\'";
loonberekening.Open();
txtNaam.Text = Convert.ToString(scmdNaam.ExecuteScalar());
txtVoornaam.Text = Convert.ToString(scmdVoornaam.ExecuteScalar());
txtStraat.Text = Convert.ToString(scmdStraat.ExecuteScalar());
txtStraatnr.Text = Convert.ToString(scmdHuisnr.ExecuteScalar());
txtPostcode.Text = Convert.ToString(scmdPostcode.ExecuteScalar());
txtGemeente.Text = Convert.ToString(scmdGemeente.ExecuteScalar());
cbxStand.Text = Convert.ToString(scmdBurgerlijkestand.ExecuteScalar());
txtGeboortedatum.Text = Convert.ToString(scmdGeboorte_datum.ExecuteScalar());
txtKinderentenlaste.Text = Convert.ToString(scmdKinderen_ten_laste.ExecuteScalar());
txtAfdeling.Text = Convert.ToString(scmdAfdeling.ExecuteScalar());
txtIndien.Text = Convert.ToString(scmdIn_dienst_sinds.ExecuteScalar());
cbxGewest.Text = Convert.ToString(scmdGewest.ExecuteScalar());
cbxValide.Text = Convert.ToString(scmdMinder_valide.ExecuteScalar());
txtHoeveelvalidekinderen.Text = Convert.ToString(scmdMinder_valide_kinderen.ExecuteScalar());
cbxPartner.Text = Convert.ToString(scmdMinder_valide_partner.ExecuteScalar());
txtInkomenpartner.Text = Convert.ToString(scmdEmail.ExecuteScalar());
txtEmail.Text = Convert.ToString(scmdEmail.ExecuteScalar());
txtTelefoonnr.Text = Convert.ToString(scmdTel_nr.ExecuteScalar());
txtGsmNr.Text = Convert.ToString(scmdGsm_nr.ExecuteScalar());
loonberekening.Close();
这听起来像是Loonbeekening在Btnopslaanwerknemergevens_Click之外打开的,从未关闭过。如果没有更多的代码,很难说清楚,但我猜你有Loonbeekening有一个共享变量,因为btnopslanwerknemergevens\u Click似乎没有创建它。可能在调用btnOpslaanwerknemergegevens_Click之前它已经打开了。我建议在BTNOPSLAANWERKNEMERGEVENS\u单击中创建一个新连接。您的方法不正确。UPDATE命令一次可以更新多个字段。因此,您需要将更新命令文本更改为如下内容 注意:这是伪代码,您需要填写点
private void btnOpslaanwerknemergegevens_Click(object sender, EventArgs e)
{
string cmdText = @"UPDATE werknemer
SET naam = @nam,
voornaam = @voornaam,
.... continue with other fields
.... and finish with
WHERE ID = @id";
using(SqlConnection con = new SqlConnection(.... connectionstring ....))
using(SqlCommand cmd = new SqlCommand(cmdText, con))
{
con.Open();
cmd.Parameters.Add("@naam", SqlDbType.NVarChar).Value = txtNaam.Text;
cmd.Parameters.Add("@vornaam", SqlDbType.NVarChar).Value = txtVoornaam.Text;
... continue adding a parameter for every field value .....
... and finally call ...
cmd.ExecuteNonQuery();
}
}
在这个伪代码中,连接不是一个全局对象,但它是使用using语句在本地创建的,在出现异常时,using语句也会关闭并处理连接。然后,使用参数占位符(@xxxx)生成命令文本,最后,在用要传递给数据库引擎的值填充参数集合以替换占位符后,只执行一个命令。您容易受到攻击。在总体方案中,为什么要定义所有这些更新查询?当您只能运行一个查询时,运行多个查询是非常浪费的<代码>更新foo集合字段=值,字段=值,字段=值。。。。其中id=$id的效率要高得多。在一个方法中创建所有sqlcommand对象有什么原因吗。。将其分解为更小的单个函数。。也不要问你能做什么。。您是否考虑过使用调试器。。?如果是这样,您将很快看到需要在何处进行修改/更改。此外,我建议将该代码放入存储过程中,并根据与流程相关的事件顺序,将其绘制在纸上,然后开始为您尝试执行的每个sql命令创建单独的方法/函数。。这是非常草率的…谢谢你的帮助,但我得到了这个错误,然后:(图片)非常感谢,但我需要把它放在哪里?在loonberekening.close()下;?或者我需要删除Loonbeekening.open&close(很抱歉,我在这方面做得很糟糕)你可以用这3行替换open语句:=)你不能打开一个已经打开的连接,所以你可以检查连接的状态,只有在需要的时候才打开它…像这样吗?因为我仍然收到相同的错误:连接未关闭。连接的当前状态为“打开”。(错误);达曼。。所以你的连接处于另一种状态。然后关闭或打开:=)那更好:=)
private void btnOpslaanwerknemergegevens_Click(object sender, EventArgs e)
{
string cmdText = @"UPDATE werknemer
SET naam = @nam,
voornaam = @voornaam,
.... continue with other fields
.... and finish with
WHERE ID = @id";
using(SqlConnection con = new SqlConnection(.... connectionstring ....))
using(SqlCommand cmd = new SqlCommand(cmdText, con))
{
con.Open();
cmd.Parameters.Add("@naam", SqlDbType.NVarChar).Value = txtNaam.Text;
cmd.Parameters.Add("@vornaam", SqlDbType.NVarChar).Value = txtVoornaam.Text;
... continue adding a parameter for every field value .....
... and finally call ...
cmd.ExecuteNonQuery();
}