Kur*_*ner 7 c# sql ora-00911 oracle-sqldeveloper
我有一个抛出的代码行
Oracle异常 - ORA-00911:无效字符
在尝试以下C#代码时:
double tempDateTimeObj = Convert.ToDouble(someClass.GetTime(tempObjID, objStartTime, todayTime).Rows[0][0]);
Run Code Online (Sandbox Code Playgroud)
GetTime是一个函数,它进行SQL调用,接受上面看到的变量,SQL调用OUTs为Oracle数字类型,然后GetTime C#函数DataTableCollection Tables每次返回一行对象.
public static DataTable GetTime(string tempObjID, DateTime objStartTime, DateTime todayTime)
{
string sql = "select some_pkg.get_time('" + tempObjID + "', to_date('" + objStartTime + "', 'mm/dd/yyyy hh:mi:ss am'), to_date('" + todayTime + "', 'mm/dd/yyyy hh:mi:ss am')) from dual;";
return <connection object>.getDS(sql).Tables[0];
}
Run Code Online (Sandbox Code Playgroud)
如果我调试,抓取具有变量值的sql字符串,并将其抛入Oracle SQL Developer,它可以正常工作并在SQL Dev控制台中返回一个数字.但是,当我调试并遇到该行时,C#代码会抛出00911异常.由于字符串sql已在Oracle SQL Dev中测试过,因此语法应该有效.鉴于有效的语法,为什么VS2010会抛出此错误/异常?
编辑: 这是一个用C#构建并发送到数据库的示例字符串:
select some_pkg.get_time('23569245', to_date('11/8/2012 1:21:06 PM', 'mm/dd/yyyy hh:mi:ss am'), to_date('12/31/2012 12:52:18 AM', 'mm/dd/yyyy hh:mi:ss am')) from dual
Run Code Online (Sandbox Code Playgroud)
已经尝试在C#字符串中使用分号并且没有分号,尽管两者都在Oracle SQL Dev中工作,但导致了相同的Oracle异常
至少,您不希望在从C#发送的SQL语句中使用尾随分号.
我强烈建议您使用绑定变量,而不是将字符串与SQL语句连接在一起.这将更有效,它将防止与共享池相关的错误,它将使您的DBA更快乐,它将保护您免受SQL注入攻击.
| 归档时间: |
|
| 查看次数: |
10232 次 |
| 最近记录: |