找不到合适的语法。这是我在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时,它仍然会看到该值,例如&#34; 03/24/2017 2017&#34;而不是&#34; 24-MAR-17&#34;,所以我得到了#34;不是有效的月份&#34;错误。
任何人都可以看到我做错了吗?
答案 0 :(得分:0)
验证存储在Oracle DB中的数据的格式。
尝试以该格式插入数据作为原始字符串,看看是否成功。
这会使您的调用代码超出影响您问题的可能变量。
如果仍然不起作用,您必须查看存储过程并确定它是否在您不知情的情况下转换格式。
如果您无法查看存储过程,则必须在调用代码中尝试一些不同的格式,直到找到正确的格式。
< / LI> 醇>答案 1 :(得分:0)
我建议使用ISO 8601格式插入值 - 即yyyy-MM-dd
var StartDt = Date.ParseExact(EI_Open_AuditStartDt.Value,"dd-MM-yyyy", CultureInfo.InvariantCulture););
//.....
cmd.Parameters.AddWithValue("v_StartDt", OracleType.DateTime).Value = StartDt.ToString("yyyy-MM-dd");
虽然,很有可能你可以取消param add中的日期格式,只需将它交给StartDt
对象。
cmd.Parameters.AddWithValue("v_StartDt", OracleType.DateTime).Value = StartDt;
答案 2 :(得分:0)
格式在C#var StartDt = Date.FormatExact(EI_Open_AuditStartDt.Value, "DD/MM/YY");
中,或者与您database nls_date_format
的格式完全相同。
或者您可以使用c#DateTime并执行以下操作,请注意该函数返回bool,您可以在if
运算符中检查它,然后将myDTvar
分配给命令参数。
DateTime myDTvar;
DateTime.TryParseExact(StartDt, "dd-mmm-yyyy", null,
DateTimeStyles.None, out myDTvar)
答案 3 :(得分:0)
我想出了这个,它起作用了:
DateTime dt1 = Convert.ToDateTime(EI_Open_SubmissionDt.Value);
var SubDt = String.Format("{0:dd-MMM-yyyy}", dt1);
任何拥有更多C#/ Oracle经验的人(我几乎都是每个人)都会在其中挖洞吗?这是一个合理的答案,还是存在潜在的问题?