1

次の途方もなく単純なコードがあります。

    static void Main(string[] args)
    {
        using (OracleConnection conn = new OracleConnection("Data Source=tnsname;User Id=zzzz;Password=xxxx"))
        {
            using (OracleCommand cmd = new OracleCommand("SELECT * from CONTRACT"))
            {
                conn.Open();
                IDataReader reader = cmd.ExecuteReader();
            }
        }
    }
}

明らかに接続文字列を変更しましたが、接続文字列が間違っているconn.Open()と呼び出しが失敗するため、少なくともデータ ソース、ユーザー ID、およびパスワードに関しては、接続文字列が正しいことがわかります。

cmd.ExecuteReader()しかし、電話に出るInvalidOperationExceptionと、次のメッセージが表示されます。Invalid operation. The connection is closed.

私は C# から SQL Server に関する多くのことを行ってきましたが、OracleClient を使用するのはこれが初めてです。廃止されたという事実を除いて、明らかに間違っていることはわかりませんが、それでも機能すると思います。本番用のコードを書くつもりはありません。ちょっとした 1 回限りのテストをしようとしているだけです。

4

2 に答える 2

3

接続オブジェクトをコマンドに関連付けていません。

cmd.Connection = conn;

または、次のように Command コンストラクターに渡します。

using (OracleCommand cmd = new OracleCommand("SELECT * from CONTRACT", conn))
于 2015-03-25T16:29:36.620 に答える
1

Connection インスタンスを OracleCommand インスタンスに割り当てていない

static void Main(string[] args)
{
    using (OracleConnection conn = new OracleConnection("Data Source=tnsname;User Id=zzzz;Password=xxxx"))
    {
        using (OracleCommand cmd = new OracleCommand("SELECT * from CONTRACT", conn))
        {
            conn.Open();
            using(IDataReader reader = cmd.ExecuteReader())
            {
                .....
            }
        }
    }
}

connコマンドのコンストラクターにインスタンスを追加するだけです。
ちなみに、リーダーもusingステートメントで囲む必要があります

于 2015-03-25T16:30:11.973 に答える