2017-04-14 78 views
1

經與發現這樣做的正確的語法麻煩的日期。這裏是我的領域在ASP方面:格式,以便它可以寫入到Oracle(「不是有效的月份」錯誤)

<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」,所以我得到「不是有效月份」的錯誤。

任何人都可以看到我在做什麼錯?

+1

我的猜測是,存儲過程採取字符串,而不是日期的說法。 –

+0

@GordonLinoff難道不是說有效日期而不是月份?你最有可能是正確的,因爲它說'OracleType.DateTime'和一個字符串被插入(不能很好?) – EpicKip

+0

嗯,這是有道理的。那麼我如何正確格式化它,以便它可以作爲日期傳遞? –

回答

0
  1. 驗證存儲在Oracle DB中的數據的格式。

  2. 嘗試插入數據作爲原始字符串,該格式,看看它是否成功。

這會將您的調用代碼排除在影響您的問題的可能變量之外。

  1. 如果仍然不起作用,則必須查看存儲過程並確定是否在您不知情的情況下轉換格式。

  2. 如果你沒有能力看到存儲過程,你將不得不在調用代碼中嘗試一堆不同的格式,直到找到合適的代碼。

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"); 

雖然,有一個很好的機會,你可以用在參數添加日期格式做掉了,根本手它是StartDt的對象。在C#var StartDt = Date.FormatExact(EI_Open_AuditStartDt.Value, "DD/MM/YY");或者

cmd.Parameters.AddWithValue("v_StartDt", OracleType.DateTime).Value = StartDt; 
0

格式是精確到你database nls_date_format的格式。

或者你可以使用C#DateTime和做以下,注意函數返回布爾值,你可以在if運營商檢查,然後分配給myDTvar命令參數。 DateTime myDTvar; DateTime.TryParseExact(StartDt, "dd-mmm-yyyy", null, DateTimeStyles.None, out myDTvar)

0

我想出了這一點,它的工作:

DateTime dt1 = Convert.ToDateTime(EI_Open_SubmissionDt.Value); 
var SubDt = String.Format("{0:dd-MMM-yyyy}", dt1); 

會有人比我更C#/ Oracle的經驗(這是幾乎每個人)注意萬佛洞呢?這是一個合法的答案,還是存在潛在的問題?

相關問題