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

Posted

技术标签:

【中文标题】尝试从 Visual c# 程序更新 oracle 时出现“无效操作。连接已关闭”错误【英文标题】:Getting "Invalid Operation. The Connection is closed" error while trying to update oracle from visual c# program 【发布时间】:2014-07-09 19:22:19 【问题描述】:

我正在运行一个可视化 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,所以我可以看到一个连接。不知道从这里去哪里。

【问题讨论】:

我看了两遍,但看不到任何骗局。打开电话 你在哪里打开连接? 但是,你有一个更大的问题。它被称为Sql Injection @Steve 如果你从不打开连接也没问题。 :) 【参考方案1】:

在执行你的命令之前尝试调用connection.Open

(是的,我知道大声笑)

【讨论】:

天哪。我之前遇到过这个错误并且遇到了同样的错误,所以我将其删除以查看它是否有所作为,然后我更改了一些东西,现在显然它可以工作了。谢谢! 我希望你面对手掌;p 当你看到这个答案并意识到你已经在某个时候投票过它并且完全忘记了的那一刻。 (双掌)

以上是关于尝试从 Visual c# 程序更新 oracle 时出现“无效操作。连接已关闭”错误的主要内容,如果未能解决你的问题,请参考以下文章

将 C# Stateful Service Fabric 应用程序从 Visual Studio 部署到 Linux

尝试在 Visual Studio 2005 上运行使用 Oracle 库的应用程序

参考 c# Visual Studio

在 Visual Studio 中将串口应用程序从 C# 转换为 C (ERROR_INVALID_PARAMETER) 87

visual c# 表单更新导致闪烁

无法从 Visual Studio C# 连接到数据库