尝试插入数据时,带参数的Oracle to_date函数不起作用

tjrkku2a  于 2023-08-03  发布在  Oracle
关注(0)|答案(2)|浏览(94)

我正在尝试编写基本的插入语句。我有日期类型的列。在C#中,我获取datetimepicker值并将其转换为字符串,然后尝试使用to_date插入它。但它显示ORA-01756:带引号的字符串未正确终止。我发现了与此错误相关的问题,但与我的情况不一样。我的剧本有什么问题:

"Insert Into Booklets (id, exam, number_of_booklets, who_gave, when_gave, return_date) values(booklet_seq.NEXTVAL, '" + exam + "', '" + bookletNumbers + "', '" + whoGaveId + "', '" + "to_date(" + gaveTime + ", 'DD/MM/YYYY'))"

字符串

6ojccjat

6ojccjat1#

就像阿布拉说的,你最后

values ( ...., to_date(20/01/2020,'DD/MM/YYYY'), ... )

字符串
当你需要

values ( ...., to_date('20/01/2020','DD/MM/YYYY'), ... )


但是如果要为你的工作场所构建一个真正的应用程序,请不要以这种方式进行SQL语句的格式化。
通过连接构建SQL语句可能是人们被黑客攻击的第一种方式。
这是我做的一个视频,展示了有一些工具可以在几分钟内破解你的应用程序,只要你沿着这条路走下去
https://youtu.be/GRh800IvllY
绑定使您的SQL对此类攻击免疫,例如

string sql = "select department_name from departments where department_id = " +
  ":department_id";
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.CommandType = CommandType.Text;
OracleParameter p_department_id = new OracleParameter(); 
p_department_id.OracleDbType = OracleDbType.Decimal;     
p_department_id.Value = 20;                              
cmd.Parameters.Add(p_department_id);

u7up0aaq

u7up0aaq2#

to_date函数的一个很老的bug
快速解决方案:使用它与秒像:

TO_DATE(yourTime || ' 00:00:00', 'YYYY/MM/DD HH24:MI:SS')

字符串

相关问题