SqlConnection CON = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\VS_project\\WindowsFormsApplication1\\WindowsFormsApplication1\\myInfo.mdf;Integrated Security=True");
private void button4_Click(object sender, EventArgs e)
{
try
{
CON.Open();
SqlDataAdapter SDA = new SqlDataAdapter("INSERT INTO myInfo(Name,Address,Gender,LangKnownHindi)VALUES('" + textBox1.Text + "','" + textBox2.Text + "','" + Gender + "','" + LANG_Hin + "')", CON);
SDA.SelectCommand.ExecuteNonQuery();
CON.Close();
MessageBox.Show("Saved SuccessFully!!!!!");
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
当我运行这个程序时,我得到:
类型'System.InvalidOperationException'的未处理异常 发生在System.Data.dll中。附加信息:连接 没有关闭。连接的当前状态是打开的。
答案 0 :(得分:1)
在共享范围内存在SQL连接对象是着名的坏主意。应使用它在操作范围内创建,使用和处置连接。否则,其他代码可能会尝试使用相同的连接对象(甚至多次使用相同的代码),使其处于未知状态。这很可能发生在这里。
在方法本身中创建连接:
private void button4_Click(object sender, EventArgs e)
{
try
{
using (SqlConnection CON = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\VS_project\\WindowsFormsApplication1\\WindowsFormsApplication1\\myInfo.mdf;Integrated Security=True"))
{
CON.Open();
SqlDataAdapter SDA = new SqlDataAdapter("INSERT INTO myInfo(Name,Address,Gender,LangKnownHindi)VALUES(@Name,@Address,@Gender,@LangKnownHindi)", CON);
SDA.SelectCommand.Parameters.AddWithValue("@Name", textBox1.Text);
SDA.SelectCommand.Parameters.AddWithValue("@Address", textBox2.Text);
SDA.SelectCommand.Parameters.AddWithValue("@Gender", Gender);
SDA.SelectCommand.Parameters.AddWithValue("@LangKnownHindi", LANG_Hin);
SDA.SelectCommand.ExecuteNonQuery();
CON.Close();
}
MessageBox.Show("Saved SuccessFully!!!!!");
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
重要提示: 另外,请注意我在这里做了几件事:
SqlConnection
对象包裹在using
块中。这基本上会创建一个try/finally
块,以确保在使用连接后(通过调用Dispose()
块中的finally
来处理连接,因此它仅适用于{{1}对象)。确保处理I / O资源非常重要。答案 1 :(得分:0)
您应该在方法内部连接并处理右侧断开连接。最简单的方法是使用 $sourcefiles = ((Get-ChildItem $source -Filter $filter).BaseName).TrimEnd(16)
foreach ($file in $sourcefiles)
{
if(!(Test-Path "$dest\$file")){
New-item -ItemType directory -path "$dest\$file"
}
Move-Item "$source\$file" "$dest\file"
}
,它还会在后台创建连接句柄。
此外,在这种情况下,using
更符合目的。因为您将用户输入连接到SQL语句,所以也要注意SQL注入。改为使用参数!
SqlCommand
答案 2 :(得分:0)
你确定你已经使用了正确的“myInfo”#39;意味着大写和小写字母是正确的顺序??它实际上有一个错误,找到d数据库视频相同的名称..在视觉工作室使用检查点来检查你的程序从开始执行..如果你不知道如何在视觉工作室中使用检查点den jst google d same..it vil show u step ur步骤进展你的代码错误行代码只需复制粘贴d行在sql server..if格式的查询数据库和参数由你给出是正确的否则它在数据库中执行val或者vil无法执行,并且vil在sql语句中显示错误