【发布时间】:2017-09-10 19:55:19
【问题描述】:
找不到合适的语法。这是我在 ASP 方面的领域:
<input type="text" id="EI_Open_AuditStartDt" class="datepicker" runat="server"
name="EI_Open_AuditStartDt" value='<%#Eval("Audit_Start_Date") %>'
style="width: 100px" />
这是我在 C# 中的代码隐藏的一部分:
HtmlInputText EI_Open_AuditStartDt = (HtmlInputText)DataGrid_Open.Rows[e.RowIndex].FindControl("EI_Open_AuditStartDt");
TextBox EI_Open_TransCIT = (TextBox)DataGrid_Open.Rows[e.RowIndex].FindControl("EI_Open_TransCIT");
string StartDt = String.Format("{0:dd-mmm-yyyy}", EI_Open_AuditStartDt.Value);
string TransCIT = EI_Open_TransCIT.Text;
DataGrid_RootCauses.EditIndex = -1;
OracleConnection conn = GetConnection();
try
{
using (OracleCommand cmd = new OracleCommand("CST_AMR_WRITE_OPENSTATUS", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
using (OracleDataAdapter da = new OracleDataAdapter(cmd))
{
cmd.Parameters.AddWithValue("v_StartDt", OracleType.DateTime).Value = StartDt;
cmd.Parameters.AddWithValue("v_TransCIT", OracleType.VarChar).Value = TransCIT;
问题是,当它到达字符串 StartDt 时,它仍然将值视为“03/24/2017”而不是“24-MAR-17”,所以我得到“无效”月”错误。
谁能看出我做错了什么?
【问题讨论】:
-
我的猜测是存储过程采用的是字符串而不是日期参数。
-
@GordonLinoff 它不会说不是有效的日期而不是月份吗?无论哪种方式,您都很可能是正确的,因为它说
OracleType.DateTime并且插入了一个字符串(不是很好吗?) -
嗯,这是有道理的。那么我将如何正确格式化它以便可以将其作为日期传递?
-
我建议使用ISO 8601 格式。即
yyyy-MM-dd -
据我了解 Oracle DB 引发的错误,这意味着 oracle
NLS_DATE_FORMAT与dd-mmm-yy不同。如果可以访问 oracle 程序,您可以在那里设置execute immediate 'alter session set nls_date_format = ''dd-mmm-yy''';这个命令,或者您可以在同一会话中从客户端执行它,或者将字符串文字格式更改为 db 格式。我猜你的数据库格式是DD/MM/YY。