2012-09-16 3 views
0

Я пытаюсь написать запросы SQL SQL, выполненные с помощью программы C#/ASP.NET, для вставки данных в Oracle Db. У меня возникли проблемы с поиском метода C#, который бы вывел строку (исходящую из пользовательского ввода формы в формате 11/11/2012), чтобы соответствовать типу данных даты Oracle. Я попытался сделать это через Convert.ToDateTime(object) method без всяких успехов.Кастинг строки C# к типу даты, который соответствует формату даты Oracle;

Вот мой код:

<%@ Page Language="C#" Debug="true" %> 
<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace="System.Data.OleDb" %> 
<script runat="server"> 

    void Page_Load(Object sender, EventArgs e) { 

     //Get user's input form form fields 
     var saleID = Convert.ToInt32(Request.Form["saleID_aspx"]); 
     var custID = Convert.ToInt32(Request.Form["custID_aspx"]); 
     var agentID = Convert.ToInt32(Request.Form["agentID_aspx"]); 
     var saleDate = Convert.ToDateTime("11/11/2012"); //Originally Request.Form["saleDate_aspx"] 
     var homeID = Convert.ToInt32(Request.Form["homeID_aspx"]); 
     var actualAmount = Convert.ToInt32(Request.Form["actualAmount_aspx"]); 
     var contractID = Convert.ToInt32(Request.Form["contractID_aspx"]); 
     var valueCommand = "VALUES(" + saleID + "," + custID + "," + agentID + "," + saleDate + "," + contractID + "," + homeID + "," + actualAmount + ")"; 
     // Declaration section 
     OleDbConnection objDBConn; 
     OleDbCommand objCmd; 
     OleDbCommand objCmdSelect; 
     OleDbDataReader objDR; 

     // Set up OLE DB Connection object 
     objDBConn = new OleDbConnection("Provider=*****1;" + 
             "User ID=********;" + 
             "Password=*******;" + 
             "Data Source=****"); 


     // Open DB connection 
     objDBConn.Open(); 

     // Create OleDbCommand object with SQL to execute 
     objCmd = new OleDbCommand("INSERT INTO Sale (saleID, cust_ID, agent_ID, saleDate, contractID, homeID, actualamount)" + 
      valueCommand, objDBConn); 


     // Create a DataReader and execute the command 
     objDR = objCmd.ExecuteReader(); 

     // Copy results from DataReader to DataGrid object 
     gridCusts.DataSource = objDR; 
     gridCusts.DataBind(); 

     // Close all objects 
     objDR.Close(); 
     objCmd.Dispose(); 

     //////////////////////////////////////////////////////////// 
     // Create OleDbCommand object with SQL to execute 
     objCmdSelect = new OleDbCommand("SELECT * " + 
           " FROM Sale " + 
           " ORDER BY saleID", objDBConn); 

     // Create a DataReader and execute the command 
     objDR = objCmdSelect.ExecuteReader(); 

     // Copy results from DataReader to DataGrid object 
     gridCusts.DataSource = objDR; 
     gridCusts.DataBind(); 

     // Close all objects 
     objDR.Close(); 
     objCmdSelect.Dispose(); 
     /////////////////////////////////////////////////////////// 
     objDBConn.Close();   
    } 

</script> 
<html> 
<head> 
<title>CUSTOMERS table</title> 
<link href="bootstrap/css/bootstrap.css" type="text/css" rel="stylesheet"> 
</head> 
<body> 
    <div id="container"> 
     <h2>Oracle SALES table contents via C#.NET and OLE DB</h2> 
     <div style="margin:0 auto text-align:center;"> 
      <asp:DataGrid id="gridCusts" class='table' runat="server" /> 
     </div> 
     <a href="index.html" target="_self" class="btn">Go Back</a> 
    </div> 
</body> 
</html> 
+0

, что является formatof вашей даты в строке –

ответ

2

Вы можете просто использовать функцию оракула to_date.

var valueCommand = "VALUES(" + saleID + "," + custID + "," + agentID + ", 
    to_date('" + saleDate.ToString("MM/dd/yyyy") + "', 'mm/dd/yyyy')," + contractID + "," + homeID + "," + actualAmount + ")"; 
+0

Великое Это работало просто отлично, спасибо, я на самом деле немного упростил свой код следующим образом: вар SaleDate = Request.Form ["saleDate_aspx"]; var valueCommand = "VALUES (" + saleID + "," + custID + "," + agentID + ", to_date ('" + saleDate + "', 'mm/dd/yyyy'), + contractID + "," + homeID + "," + actualAmount + ")"; – user1676281

1

Я видел много проблем в вашем коде, которые вызывают отказ вашей программы.

  1. Жестко закодированная строка SQL, вызывающая type conversion, escaping and SQL Injection issues. How To: Protect From SQL Injection in ASP.NET
  2. Выбор методов команды - Когда использовать ExecuteNonQuery, ExecuteScalar и ExecuteReader? Вызвать метод ExecuteNonQuery() для выполнения операторов SQL, отличных от SELECT.
  3. Неправильный способ утилизации базы данных resourecs. Используйте using блок. .?! (SO Темы - What is the C# Using block and why should I use it? и C# - closing Sql objects best practice
Смежные вопросы