ADO.NET编程说错误发生 - ExecuteNonQuery需要一个开放且可用的连接

时间:2016-04-09 16:50:30

标签: c# sql-server ado.net

现在,我的教授要求我使用ADO.NET实现一个案例研究,将数据保存到SQL Server中。我已经在SQL Server中创建了一个数据库和表,我试图通过C#ADO.NET在Visual Studio中创建一些表单。我根据YouTube视频写道。但我不知道为什么我无法成功将数据保存到数据库。

我编写代码时的结果。

任何帮助将不胜感激。

namespace casestudy
{
    public partial class Form2 : Form
    {
        SqlConnection vcon2 = new SqlConnection(@"Data Source=SOPHIA-PC\SQLEXPRESS;Initial Catalog=casestudy;Integrated Security=True");

        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            try
            {
                vcon2.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show("error.occured" + ex.Message);
                this.Dispose();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string vsql = string.Format("insert into Calluser values ({0}, '{1}', '{2}', {3})", Int32.Parse(txtUserID.Text), txtFName.Text, txtLName.Text, Int32.Parse(txtZoneID.Text));
            SqlCommand vCom = new SqlCommand(vsql, vcon2);
        try
        {
            vCom.ExecuteNonQuery();
            vCom.Dispose();
            MessageBox.Show("The User Information stored.");
            txtZoneID.Text = "";
            txtLName.Text = "";
            txtFName.Text = "";
            txtUserID.Text = "";
            txtUserID.Focus();
        }

        catch (Exception ex)
        {
            MessageBox.Show("error.occured" + ex.Message);
            this.Dispose();
        }
    }
}
}

2 个答案:

答案 0 :(得分:0)

您是否可以添加检查以查看连接是否实际打开,如果在您致电ExecuteNonQuery()之前未重新打开连接

if (vcon2.State != ConnectionState.Open)
{
    vcon2.Open();
}
vCom.ExecuteNonQuery();

答案 1 :(得分:0)

打开应用程序或表单时打开连接可能不是最好的方法。您希望在执行sql之前立即打开连接并尽快关闭它。

话虽如此,我建议从Form2_Load事件中删除代码。并在button1_Click或您从那里调用的其他方法中执行所有操作。更好的方法是拥有一个为您的应用程序提供数据访问的类或组件。还使用using语句,因为它将确保即使抛出异常也会处置资源。

    using (SqlConnection connection = new SqlConnection(@"Data Source=SOPHIA-PC\SQLEXPRESS;Initial Catalog=casestudy;Integrated Security=True");))
    {
        SqlCommand command = new SqlCommand(vsql, connection);
        command.Connection.Open();
        command.ExecuteNonQuery();
    }

有关使用声明的一些信息:

http://www.dotnetperls.com/using

https://msdn.microsoft.com/en-us/library/yh598w02.aspx