基本上只是在YYYYMMDD中抽出一个日期,我可以在查询分析器中做到这一点但是当我尝试在C#中运行此查询时,我一直得到一个未找到列的错误,它似乎也很难进行连接(但这不是一个问题)所以有点不确定这里发生了什么..我真的只是想让我的to_char函数工作。想法?谢谢!
string oradb = "user id=x;password=x;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)"
+"(HOST=x)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=x)));";
OracleConnection conn = new OracleConnection(oradb);
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText =
"SELECT to_char(ProblemDate, 'yyyymmdd'), data1, data2,"
+"data4, data5, data6"
+" WHERE ( ProblemDate >='03-oct-2011' ) "
+"AND ( ProblemDate <= '08-oct-2011' ) AND "
+"( data1 in ( '3','5','6' ) )";
OracleDataReader dr = cmd.ExecuteReader();
string fileOut1 = Request.PhysicalApplicationPath;
string fileOut = fileOut1 + "Text5.txt";
// Creates the file
StreamWriter sw = new StreamWriter(fileOut);
if (dr.HasRows)
{
while (dr.Read())
{
string data1= (string)dr["data1"].ToString();
string data2 = (string)dr["data3"].ToString();
string data3 = (string)dr["data4"];
string data4 = (string)dr["data5"].ToString();
string data5 = (string)dr["data6"].ToString();
string ProblemDate = (string)dr["ProblemDate"].ToString();
//remove the comma
char[] MyChar = { ',' };
sw.WriteLine(data1.PadRight(10) + data2.PadRight(5) + data3.TrimEnd(MyChar) + "000" +
data4 + "000" + data5+ ProblemDate + " " + "N" );
Label1.Text = "File created successfully.<br />";
Label1.Text += fileOut1;
}
// Closes the connenction.
sw.Close();
conn.Close();
}
else
{
Label1.Text = "No data written.";
}
答案 0 :(得分:3)
首先,您可以从Java内部打印查询并查看实际的查询被触发吗?
这些是我看到的问题......
SELECT to_char(ProblemDate, 'yyyymmdd'), data1, data2,
data4, data5, data6
WHERE ( ProblemDate >='03-oct-2011' )
AND ( ProblemDate <= '08-oct-2011' )
AND data1 in ( '3','5','6' ) );
查询中有 no from clause 和table_name。
可能不是问题的原因,但想指出来。 由于你正在做一个to_char,我假设ProblemDate是一个日期数据类型。始终建议在比较时使用显式强制转换,因此将条件更改为
ProblemDate&gt; = to_date('03 -oct-2011','dd-mon-yyyy')和 ProblemDate&lt; = to_date('08 -oct-2011','dd-mon-yyyy')
答案 1 :(得分:2)
您是否尝试过对列进行别名处理?例如
SELECT to_char(ProblemDate, 'yyyymmdd') as ProblemDate, data1, data2 ...
作为旁注,您可能会在WHERE
子句中遇到日期比较问题。当然,我对您的应用程序,客户端和/或服务器区域设置一无所知,也许您的示例仅用于说明目的,但我认为使用TO_DATE
比使用字符串比较更安全:
cmd.CommandText =
"SELECT to_char(ProblemDate, 'yyyymmdd') as ProblemDate, data1, data2,"
+"data4, data5, data6"
+" WHERE ( ProblemDate >= TO_DATE('03-oct-2011', 'DD-MON-YYYY') ) "
+"AND ( ProblemDate <= TO_DATE('08-oct-2011', 'DD-MON-YYYY') ) AND "
+"( data1 in ( '3','5','6' ) )";
答案 2 :(得分:1)
你的问题可能与这一行有关:
string draw_date = (string)dr["ProblemDate"].ToString();
尝试将函数标记为某个东西,因为您没有调用“ProblemDate”来调用函数。如果输出回来的数组,你可能会看到它的名称。
编辑:您也可以查看此行
string data2 = (string)dr["data3"].ToString();
因为在DB的调用中存在data2,而不是data3