当前位置: 首页 > 知识库问答 >
问题:

用于获取输入参数以查询Oracle数据库的Web API

郁隐水
2023-03-14

我正在创建具有四个输入参数的 Web API。输入参数将在 Select 语句的 where 子句中使用。Oracle 中的字段是 ROOM (Varchar),SUBMIT_DATE(Date)(例如:01-JAN-16)。URL 应该是类似于 '/api/TGSSampleDatas?房间=654

public class TGSSampleDatasController : ApiController
{
    [HttpGet]
    public HttpResponseMessage Getdetails(string ROOM,DateTime ? SUBMITDATE = null)
        {
            List<OracleParameter> prms = new List<OracleParameter>();
            List<string> selectionStrings = new List<string>();
            string connStr = ConfigurationManager.ConnectionStrings["TGSDataConnection"].ConnectionString;
        using (OracleConnection dbconn = new OracleConnection(connStr))
        {
            DataSet userDataset = new DataSet();
            var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where ROOM = " + ROOM +"and SUBMIT_DATE =" +"'"+SUBMITDATE+"'";
           var returnObject = new { data = new OracleDataTableJsonResponse(connStr, strQuery, prms.ToArray()) };
            var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json"));
            ContentDispositionHeaderValue contentDisposition = null;
            if (ContentDispositionHeaderValue.TryParse("inline; filename=TGSData.json", out contentDisposition))
            {
                response.Content.Headers.ContentDisposition = contentDisposition;
            }
            return response;

共有1个答案

胡星汉
2023-03-14

您的Sql语句错误。

"SELECT * from LIMS_SAMPLE_RESULTS_VW where ROOM = " + ROOM +"and SUBMIT_DATE =" +"'"+SUBMITDATE+"'";
//--------------------------------no ticks-^----^ -no space--^
  • room是一个字符串,因此如果您要使用字符串连接(但不要),您应该将其与'一起括起来,否则它将成为语句的一部分。
  • ROOM和之间也没有空格。

真正的解决办法是对< code>ROOM和< code>SUBMITDATE都使用参数。这样做可以从一开始就防止这样的问题发生。

我在猜测参数类型,您可能需要更正它们。

List<OracleParameter> prms = new List<OracleParameter>();
prms.Add(new OracleParameter("ROOM", OracleDbType.Varchar2, ROOM, ParameterDirection.Input));
prms.Add(new OracleParameter("SUBMITDATE", OracleDbType.Date, SUBMITDATE ?? System.DBNull.Value, ParameterDirection.Input));
// note that because you are using a nullable type as input you should pass in DBNull.Value as the value if the value is null in your c# code.

var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where ROOM = :ROOM and SUBMIT_DATE = :SUBMITDATE";

像您这样的字符串串联会使您的系统容易受到sql注入攻击,并给您的sql代码增加问题。后者可以通过传入包含< code>'标记的值来说明。再做一次,你可以结束sql语句,并在末尾添加另一个语句。

 类似资料:
  • 问题内容: 我的代码有问题。 像这样的情况: 我有一个下拉列表,如果选择“个人”,则会出现新的下拉列表,其中包含从数据库查询中检索到的数据;如果选择“公开”,则该下拉列表将消失。 这样的HTML代码: 查询如下: 像这样的JavaScript代码: 我不知道如何将值/结果发送到javascript代码(选择选项中的值和名称)。 问题答案: 在javascript中,您必须对您的php文件进行操作:

  • 查询是什么来获取雪花数据库中所有表的行数。

  • 问题内容: 以下两个中的哪一个更准确? 问题答案: 这两个要求是不相等的。第一个的等效版本为: 在那种情况下,我希望该版本比第二个版本稍快,仅是因为它的行数较少。但是您不可能测量出差异。 这两个查询都基于完全相同的数据,因此它们将同样准确。

  • 本文向大家介绍Oracle 数据库特殊查询总结,包括了Oracle 数据库特殊查询总结的使用技巧和注意事项,需要的朋友参考一下 1. 查询本节点及本节点以下的所有节点: 2. 查询节点中所有的层级关系 3. 对数据库表结构的操作 4. 其他查询 6. loop 的使用 7. 存储过程的书写 以上所述是小编给大家介绍的Oracle 数据库特殊查询总结,希望对大家有所帮助!

  • SqliteOpenHelper只是一个工具,是SQL世界和OOP之间的一个通道。我们要新建几个类来请求已经保存在数据库中的数据,和保存新的数据。被定义的类会使用ForecastDbHelper和DataMapper来转换数据库中的数据到domain models。我仍旧使用默认值的方式来实现简单的依赖注入: class ForecastDb( val forecastDbHelper:

  • 问题内容: 我们最近将数据库从MSSQL切换到MySQL,使用参数的查询不再起作用。 这是MSSQL中的查询示例: 通常,参数浏览器会弹出并询问:id的值,但是在MySQL中,我会收到此错误: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在’:id’附近使用正确的语法 我尝试使用@或?代替:,它不起作用。 在此先感谢您的帮助。 问题答案: 语法不一样 用户定义变量的文档