如何使用C#在Oracle关系数据库中插入日期

时间:2009-03-30 18:05:56

标签: c# oracle odac

我在Oracle中有Date Var,我尝试从我的C#程序中插入数据

sql = "insert into Table(MyDate) values (" + convert.todatetime(txt) + ")";

我收到错误,我该怎么办?

7 个答案:

答案 0 :(得分:10)

cmd.CommandText = "INSERT INTO Table (myDate)VALUES(:dateParam)";

cmd.Parameters.Add(new OracleParameter("dateParam", OracleDbType.Date))
    .Value = DateTime.Now;

cmd.ExecuteNonQuery();

答案 1 :(得分:8)

使用参数。它将解决您的问题并防止注射。

答案 2 :(得分:5)

Oracle期望它是一个实际的日期值,而不仅仅是一个看起来像日期的字符串。您必须使用TO_DATE()函数来解释字符串的格式,如下所示:

INSERT INTO Table (myDate)
VALUES(TO_DATE('2009-03-30 12:30:00', 'YYYY-MM-DD HH:mi:ss'));

答案 3 :(得分:1)

尝试使用DateTime.TryParse(text)或DateTime.Parse(text)

答案 4 :(得分:1)

请绑定您的变量(如ocdecio告诉)!它不仅可以防止sql注入,而且速度也快得多。特别是在多并发情况下。请在此处阅读:http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28844/building_odp.htm#CEGCGDAB

“绑定变量是SQL语句中的占位符。当数据库收到SQL语句时,它确定该语句是否已经执行并存储在内存中。如果该语句确实存在于内存中,Oracle数据库可以重用它并跳过解析和优化语句的任务。使用绑定变量使语句可以使用不同的输入值重用。使用绑定变量还可以提高数据库中的查询性能,无需特殊处理文字引号输入,并防止SQL注入攻击。“

答案 5 :(得分:0)

我知道这是一个问题很少的问题,但是当我遇到同样的问题时,我看到了一些不好的答案。这就是我解决它的方法,我将使用OP的上下文回答:

将日期解析为DateTime变量:

DateTime myDate = DateTime.Parse(txt);

然后参数化您的查询:

sql = "insert into Table(MyDate) values (:myDate)";

设置OracleParameter

OracleParameter param = new OracleParameter();
param.ParameterName = "myDate";
param.OracleDbType = OracleDbType.Date;
param.Value = myDate;

假设您已OracleConnection作为connection,请设置您的命令并添加参数:

OracleCommand cmd = new OracleCommand(sql, connection);
cmd.Parameters.Add(param);

执行:

cmd.ExecuteNonQuery();

NOT 在任何TO_DATE废话上浪费你的时间。这适用于直接使用SQL * Plus或Oracle SQL Developer添加内容,或者您​​希望以TO_DATE期望的EXACT格式发送STRING变量值(不是DateTime变量)的MAYBE,以及您在您的查询或存储过程中的TO_DATE构造内进行分配(即to_date('2013-05-13 12:13:14', 'YYYY-MM-DD HH24:MI:SS')。使用DateTime变量并将其分配给OracleParameter OracleDbType OracleDbType.Date,假设您的表格中有DATE字段,并且可以将txt解析为DateTime变量,但最好也是最简单的。

答案 6 :(得分:0)

最简单的方法:

DateTime inputDate = Convert.ToDateTime("01/01/2019"); //<---Input Sample Date in format

string queryParameters = String.Format("SELECT * FROM TABLE WHERE DATE = '{0}')", inputDate.ToString("dd-MMM-yyyy")); //<-- Converts System.DateTime into Oracle DateTime

//Forget looking anywhere else for an answer, copy and paste and reform this very code 
//and see the results