0

我是在 .NET 上与 Oracle 合作的新手。我过去使用过 SQL,没有遇到过这个问题。我有一个使用此连接字符串连接到的 Oracle 服务器:

<add key="Test" value="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxx))); User Id=xxxxxxx;Password=xxxxxx;"/>

   private OracleConnection Testconnection = new OracleConnection((string)new System.Configuration.AppSettingsReader().GetValue("Test", typeof(string)));

然后,我正在打开连接,检查它是否已打开(已打开)并尝试执行以下 oracle 命令。

  var accountOpenDate = new OracleCommand("select creationDate from tbl_user where id=:userid", this.Testconnection);
        getIsbAaccountOpenDate.Parameters.Add(":userid", this.IsbUserId);
        string isbAccountOpenDate = getIsbAaccountOpenDate.ExecuteNonQuery().ToString();

Oracle命令是正确的,当我在sql developer中执行它时它可以工作,但是当我执行代码时,isbAccountOpenDate的值为-1。我已经尝试了一切,所以不知道该怎么办了。

提前致谢

4

2 回答 2

1

我不是 ODP 专家,但我认为这是您的问题:

getIsbAaccountOpenDate.Parameters.Add(":userid", this.IsbUserId); 
.                                      ^

冒号在 SQL 语句中用于标识绑定变量,以便 SQL 编译器知道不要USERID在其范围内查找调用的内容。但这不是名称的一部分。如果您从参数分配中删除冒号,您的代码应该可以工作。或者至少因其他原因失败:)


顺便说一句,您正在发出 SELECT 语句,那么您为什么要起诉executeNonQuery()?不应该这样executeScalar()吗?(它应该executeReader()用于返回多条记录的查询。)

于 2012-05-04T09:38:47.513 回答
0

尽管您必须使用冒号来标识 SQL 脚本中的参数,但它不是参数名称的一部分。此外,返回数据库标量值的正确方法是ExecuteScalar. 这可以解决您的问题:

var stm = "SELECT creationDate FROM tbl_user WHERE id=:userid;";
var cmd = new OracleCommand(stm, this.Testconnection);
cmd.Parameters.Add("userid", this.IsbUserId);
var result = (string) cmd.ExecuteScalar();

System.Data.OracleClient您可以在 MSDN中找到完整的参考资料: OracleParameterCollectionOracleCommand.ExecuteScalarOracleCommand.ExecuteNonQuery

于 2012-05-04T09:39:08.947 回答