私は、「ORA-01036を:不正な変数名/番号」を取得の下のExecuteReaderの呼び出しに:DotConnectコンポーネントを使用して結果セットを取得しようとすると、エラーが発生するのはなぜですか?コード付き
cmd.Parameters.Add("cur", Devart.Data.Oracle.OracleDbType.Cursor);
cmd.Parameters["cur"].Direction = ParameterDirection.Output;
Devart.Data.Oracle.OracleCursor oraCursor =
(Devart.Data.Oracle.OracleCursor)cmd.Parameters["cur"].Value;
Devart.Data.Oracle.OracleDataReader odr = cmd.ExecuteReader();
while (odr.Read()) {
ACurrentUserRoles.Add(odr.GetString(0));
}
私が何をしたいのかは、クエリの結果をリストに移入されます。私はDevArtのドキュメント(またはグーグル)の例は見ていません。
OracleDataReader odr = cmd.ExecuteReader();
while (odr.Read())
{
ACurrentUserRoles.Add(odr.GetString(0));
}
... OracleのODPコンポーネントを使用していましたが、DotConnectコンポーネントとの並列処理が見つかりませんでした。
更新日:
はさて、ここで(ACurrentUserRolesは、文字列のリストである)全体の方法です:
public void PopulateCurrentUserRoles(String AUserName, List<String> ACurrentUserRoles) {
_UserName = AUserName;
String query = "select roleid from ABCrole where ABCid = :ABCID";
Devart.Data.Oracle.OracleCommand cmd = new Devart.Data.Oracle.OracleCommand(query, con);
cmd.CommandType = CommandType.Text;
int _ABCID = GetABCIDForUserName();
cmd.Parameters.Add("ABCID", _ABCID);
cmd.Parameters["ABCID"].Direction = ParameterDirection.Input;
cmd.Parameters["ABCID"].DbType = DbType.String;
cmd.Parameters.Add("cur", Devart.Data.Oracle.OracleDbType.Cursor);
cmd.Parameters["cur"].Direction = ParameterDirection.Output;
//cmd.ExecuteNonQuery(); blows up: "illegal variable name/number"
//cmd.ExecuteCursor(); " "
//cmd.ExecuteReader(); " "
Devart.Data.Oracle.OracleCursor oraCursor =
(Devart.Data.Oracle.OracleCursor)cmd.Parameters["cur"].Value;
Devart.Data.Oracle.OracleDataReader odr = oraCursor.GetDataReader(); // "Object reference not set to an instance of an object"
while (odr.Read()) {
ACurrentUserRoles.Add(odr.GetString(0));
}
}
私は取得していますERRのMSGのは、彼らが発生した行にコメントとして追加されます。
しかし、それはAでありクエリ、なぜ私はExecuteNonQuery()を使用するでしょうか? Insert、Update、Deleteステートメントのように聞こえます。これは、1..Nレコードを返すSelectです。 –
また、クエリの結果をリストに追加したいので、それをリーダでループしたいのです。上記の最初の例では、 "dataSet"はどこからでも出てきます - グリッドを埋めるのですか? –
次に、質問のテキストを表示してください。カーソルが不要な場合は、パラメータから削除するか、2番目の例を使用します。 – Steve