在尝试从Visual C#程序更新Oracle时,出现“无效操作。连接已关闭”错误。

9

我有一个可视化C#程序正在运行,但每当我尝试进行更新时,会出现连接已关闭的错误。这是我的代码:

private void Update()
{
    try
    {
        String OneMachineScheduleOrder = "";
        String series = "";
        String oven = "";
        String battery = "";
        int x,y;

        var sortedTextboxes = panel1.Controls
                .OfType<TextBox>() // get all textboxes controls
                .OrderBy(ctrl => ctrl.TabIndex); // order by TabIndex
        foreach (TextBox txt in sortedTextboxes)
        {
            //Console.WriteLine(Convert.ToInt32(txt.TabIndex/2+1) + ": " + txt.Text);
            OneMachineScheduleOrder = (txt.TabIndex / 2 + 1).ToString();
            series = txt.Text.Substring(0, 1);
            oven = txt.Text.Substring(1, 2);
            battery = txt.Text.Substring(4).Trim();
            if (Char.IsLetter(series[0]) && int.TryParse(oven, out y) && int.TryParse(battery, out x) && txt.Text[3].Equals('/'))
            {
                using (OracleConnection con = new OracleConnection(connectString))
                {
                    OracleCommand cmd = connection.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "update Oven_Master set SERIES = '" + series + "', OVEN = '" + oven + "', BATTERY = '" + battery + "' where ONE_MACHINE_SCHEDULE_ORDER = '" + OneMachineScheduleOrder + "'";
                    cmd.Connection = con;
                    cmd.ExecuteNonQuery();
                    Console.WriteLine(cmd.CommandText);
                    con.Close();
                }
            }
            else { MessageBox.Show("Number: " + OneMachineScheduleOrder + " Is Invalid!"); }                           
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        connection.Close();
    }
}

基本上,我在表单上有一堆文本框,填写的格式为A01/01。 我将文本框排序到一个变量中,然后对于每个文本框,我解析出相关数据(OneMachineScheduleOrder、系列、烤箱和电池)。 如果数据格式正确,我使用具有全局连接字符串(使用调试器检查了它的正确值)的oracleConnection创建并执行OracleCommand。 否则,提示用户数据格式不正确。
然而,我得到一个连接已打开的错误。 我尝试在那一行上设置断点,并且我发现con = OracleConnection,所以我可以看到确实有一个连接。 不知道该怎么办。

我已经仔细查看了两次,但是我看不到任何con.Open的调用。 - Steve
你在哪里打开连接? - Michael McGriff
2
然而,你有一个更大的问题。它被称为SQL注入 - Steve
1
@Steve 如果你从未打开连接,那就没有问题。 :) - Michael McGriff
1个回答

20

在执行命令之前,请尝试调用connection.Open。

(是的,我知道,笑死了对吧)


2
天哪。我以前也遇到过这个问题,于是我把它删除了,看看是否有所改善,然后我改了一些东西,现在显然它可以工作了。谢谢! - Alex Kibler
3
我希望你扇了自己一巴掌;p - John Nicholas
4
当你看到这个答案并意识到你之前已经点赞了,但完全忘记了这一事实的那一刻。(双手掌打脸) - emregon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接