1

変数バインディングを使用した単純な select ステートメントでは、行が返されませんか??

  OracleConnection con = new OracleConnection(constr);
  con.Open();
 OracleCommand cmd = new OracleCommand();
  cmd.Connection = con;
  cmd.CommandText = "select country_name from hr.countries where country_id = :country_id;

  OracleParameter p_country_id = new OracleParameter();
  p_country_id.OracleDbType = OracleDbType.Varchar2;

  p_country_id.Value = "UK";

  cmd.Parameters.Add(p_country_id);

  OracleDataReader dr = cmd.ExecuteReader();

  if (dr.Read())
  {} ---> no rows 

パラメータ名、方向、サイズを追加しようとしましたが、まだ結果は0ですか???

何か助けて??

4

3 に答える 3

1

これはすべて正しいと思いますが、メモ帳に書かれています。少なくとも、それはあなたを正しい軌道に乗せるはずです。

using (OracleConnection con = new OracleConnection(constr))
{
    con.Open();
    using (OracleCommand cmd = con.CreateCommand())
    {
        cmd.CommandText = "select country_name from hr.countries where country_id = :country_id";
        cmd.Parameters.Add("country_id", "UK")

        OracleDataReader dr = cmd.ExecuteReader();

        if (dr.Read()) 
       { 
            // You code here
       }
    }
}

注:usingデータベースクエリを実行するときにこれが常に推奨されるため、ステートメントをそこに配置します。例外が発生した場合、usingステートメントはデータベース接続がまだ閉じられていることを保証します。

于 2012-12-04T17:48:52.510 に答える
0

パラメータに名前を付けるのを忘れました。そうすることでうまくいくはずです:

p_country_id.ParameterName = "country_id";
于 2012-12-04T17:13:02.970 に答える
0

みんなに返信してくれてありがとう、私のユニットテストプロジェクトapp.configは間違ったDBスキーマを指していました:(

ぐうぐうううううううう!ばかげたことは何も得られません:)私はインフルエンザのせいにします:)

于 2012-12-07T11:34:15.790 に答える