首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当尝试将日期从C#代码更新到oracle数据库应用程序时,会卡住

当尝试将日期从C#代码更新到oracle数据库应用程序时,会卡住
EN

Stack Overflow用户
提问于 2015-04-15 16:32:52
回答 2查看 1.5K关注 0票数 1

因此,我希望从应用程序中更新oracle数据库中的日期字段,因此我使用以下查询和代码

代码语言:javascript
运行
复制
string insertqeuryrepair = "UPDATE REPARATIE SET PROBLEEM ='" + problem + "',DATUM = '11-12-2015' WHERE ONDERHOUDID=" + maintenanceID.ToString();
OracleSQL.modifyQuery(insertqeuryrepair);

我的modifyQeury函数如下

代码语言:javascript
运行
复制
 public static Boolean modifyQuery(String query)
    {
        bool succes = false;
        OracleCommand cmd = new OracleCommand(query, connection);
        try
        {
            if (connection.State == ConnectionState.Closed)
                connection.Open();
            cmd.ExecuteNonQuery();
            succes = true;
        }
        catch (Exception e)
        {
            Debug.WriteLine("[OracleSQL]Error, message: " + e.Message);
        }
        finally
        {
            connection.Close();
        }
        return succes;
    }

现在,当我运行这段代码时,应用程序被卡住了,然而,当我删除DATE = '11-12-2015‘时,它工作得很好。‘如果应用程序不能正常运行,我该如何更新日期?

EN

回答 2

Stack Overflow用户

发布于 2015-04-15 16:40:53

如果您使用TO_DATE()显式设置DATUM的格式,如下所示

代码语言:javascript
运行
复制
string insertqeuryrepair = "UPDATE REPARATIE SET PROBLEEM ='" + problem + "',DATUM = TO_DATE('11-12-2015', 'dd-mm-yyyy') WHERE ONDERHOUDID=" + maintenanceID.ToString();
票数 0
EN

Stack Overflow用户

发布于 2016-10-06 01:00:55

首先,使用冒号表示OracleParameter ParameterName值来参数化更新查询:

代码语言:javascript
运行
复制
string insertqueryrepair = "UPDATE REPARATIE SET PROBLEEM = :problem, DATUM = :myDate WHERE ONDERHOUDID= :maintenanceID";

接下来,将日期解析为DateTime变量:

代码语言:javascript
运行
复制
DateTime myDate = DateTime.Parse("11/12/2015");

第三,设置一个返回布尔变量并调用您的函数,但将其重命名为doQuery,而不是modifyQuery,因为您不应该修改其中的任何内容-只需设置参数并执行它:

代码语言:javascript
运行
复制
bool succes = OracleSQL.doQuery(insertqueryrepair, myDate, problem, maintenanceID.ToString());

现在,我们将您的值传递给函数并对其进行参数化:

代码语言:javascript
运行
复制
public static Boolean doQuery(string query, string problem, string maintenanceID, DateTime myDate)
{
    bool succes = false;
    OracleCommand cmd = new OracleCommand(query, connection);
    try
    {
        if (connection.State == ConnectionState.Closed)
            connection.Open();

        OracleParameter param1 = new OracleParameter();
        param1.OracleDbType = OracleDbType.Nvarchar2;
        param1.ParameterName = "problem";
        param1.Value = problem;

        OracleParameter param2 = new OracleParameter();
        param2.OracleDbType = OracleDbType.Nvarchar2;
        param2.ParameterName = "maintenanceID";
        param2.Value = maintenanceID;

        OracleParameter param3 = new OracleParameter();
        param3.OracleDbType = OracleDbType.Date;
        param3.ParameterName = "myDate";
        param3.Value = myDate;

        cmd.Parameters.Add(param1);
        cmd.Parameters.Add(param2);
        cmd.Parameters.Add(param3);

        cmd.ExecuteNonQuery();
        succes = true;
    }
    catch (Exception e)
    {
        Debug.WriteLine("[OracleSQL]Error, message: " + e.Message);
    }
    finally
    {
        connection.Close();
        cmd.Dispose();
    }
    return succes;
}

您甚至可以执行额外的步骤,使传入的变量成为泛型(param1、param2等),并检查它们是否为null,这样,如果您向此函数传递了一个不同的查询,可能只有1个值(其余的值可以设置为null),它就不必一直对3个变量进行操作。如果设置正确,此函数可以为您的任何查询执行所有工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29645360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档