【问题标题】:SQL Query doesn't work in asmx web serviceSQL 查询在 asmx Web 服务中不起作用
【发布时间】:2015-07-16 14:28:59
【问题描述】:

我做了 asmx web,从 oracle 数据库中获取数据。当我使用短查询时它工作正常:

select * from dbrepn10.DDT_DA_DIRECTION_SV

但如果我使用这样的长查询:

SELECT XB_.R_OBJECT_ID, XB_.OBJECT_NAME, XB_.R_CREATION_DATE, XB_.R_MODIFY_DATE, XB_.R_MODIFIER, XB_.R_ACCESS_DATE, XB_.A_CONTENT_TYPE, 
    XB_.R_CONTENT_SIZE, XB_.OWNER_NAME, XB_.ACL_DOMAIN, XB_.ACL_NAME, XB_.R_CREATOR_NAME, BKB_.DSI_PAGE_COUNT, EKB_.DSS_REG_NUMBER, EKB_.DST_REG_DATE, EKB_.DSS_OBJECT_NAME_RU, MKB_.DSS_TITLE_RU, MKB_.DSS_TITLE_KK 
FROM dbrep36.DM_SYSOBJECT_S XB_, dbrep36.DDT_EAR_S BKB_, dbrep36.DDT_EAR_REG_S EKB_,dbrep36.DDT_DA_DIRECTION_S MKB_ 
WHERE (XB_.R_OBJECT_ID=MKB_.R_OBJECT_ID AND (XB_.R_OBJECT_ID=BKB_.R_OBJECT_ID AND (BKB_.R_OBJECT_ID=MKB_.R_OBJECT_ID AND (XB_.R_OBJECT_ID=EKB_.R_OBJECT_ID AND(BKB_.R_OBJECT_ID=EKB_.R_OBJECT_ID AND EKB_.R_OBJECT_ID=MKB_.R_OBJECT_ID)))))

我的网络服务没有返回结果。并且没有错误消息。

可能是什么原因?

代码:

 public DataTable GetSpecificView(string query_string)
    {
        string host = WebConfigurationManager.AppSettings["host"].ToString();
        string port = WebConfigurationManager.AppSettings["port"].ToString();
        string servicename = WebConfigurationManager.AppSettings["servicename"].ToString();
        string user = WebConfigurationManager.AppSettings["user"].ToString();
        string password = WebConfigurationManager.AppSettings["password"].ToString();

        DataTable data = new DataTable();

        string connectionString = OracleConnString(host, port, servicename, user, password);
        OracleConnection con = new OracleConnection(connectionString);
        con.ConnectionString = connectionString;
        string result = "";
        try
        {
            con.Open();
            OracleCommand cmd = new OracleCommand(query_string, con);

            DataSet dataSet = new DataSet();
            new OracleDataAdapter(cmd).Fill(dataSet);
            if (dataSet.Tables.Count > 0)
            {
                data = dataSet.Tables[0];
            }
            con.Close();

        }
        catch (Exception ex)
        {
            result = ex.Message;
        }
        return data;
    }

【问题讨论】:

  • 如果直接在数据库上运行长查询是否返回结果?
  • 您似乎没有对异常消息做任何事情,您只是将它吞入result 字符串 - 它不会在任何地方打印出来。此外,您应该将 con.Close() 调用放在 finally 块中,因为如果抛出异常,它将不会被调用。

标签: c# sql oracle asmx


【解决方案1】:

您确定您没有遇到异常吗?你的 catch 循环没有做任何事情,它只是将异常消息分配给一个似乎没有记录在任何地方的字符串。

此外,您应该将 con.Close() 调用放在 finally 块中,因为如果抛出异常,它将不会被调用。

您是否尝试过在数据库上正确运行 SQL 查询以确保它确实有效?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多