首页 > 解决方案 > 当我尝试使用 C# 在 Oracle 数据库中使用占位符更新时间戳列时,应用程序冻结

问题描述

我正在尝试使用 C# 更新 Oracle 数据库中的 2 列。我要更新的列StartTime是时间戳和Name字符串。但是,当我运行我的代码时,应用程序会冻结。我以下是我的代码:

public int StartProduction(string serialNr, string empName)
{
    string queryString = "UPDATE RO_EXEMPLAAR_PIM SET PLAKTAFEL_START=systimestamp, STARTED_BY=:startedBy WHERE SERIENR=:serialNr";
    using (OracleConnection connection = new OracleConnection(connectionString))
    {
        using (OracleCommand command = new OracleCommand(queryString, connection))
        {
            try
            {
                OracleDataAdapter da = new OracleDataAdapter();
                connection.Open();

                command.Parameters.AddWithValue("serialNr", serialNr);
                command.Parameters.AddWithValue("startedBy", empName);

                da.InsertCommand = command;
                int nrOfRecordsChanged = command.ExecuteNonQuery();
                return nrOfRecordsChanged;
            }
            catch
            {
                return -1; //which means the try-block was not executed succesfully
            }
            finally
            {
                connection.Close();
            }
        }
    }
} 

我以这样的形式称呼它:

if (dh.StartProduction(serialNr, empName) != -1)
{
    MessageBox.Show("Production started successfully!");
}
else
{
    MessageBox.Show("Production cannot be started!");
}

我在网上查了一下,找不到我的代码有什么问题。提前致谢!

标签: c#oraclesql-update

解决方案


尝试非锁定读取查询,例如;

SELECT * FROM V$VERSION;

如果可行(证明您的连接字符串有效)。

那么你可能有一个锁定问题。

一般来说:(特别是对于开发人员)

确保您没有错过“提交”;在您的 sql-developer 或 dbvisualizer 或类似的东西中。(或您的开发团队中的某个人)。在没有“提交”的情况下运行更新;在里面这些工具会锁定一行。

如果您找不到罪魁祸首:重新启动服务器即可。


推荐阅读