• 締切済み

Oracleへの接続について

OS:WindowsWp 言語:Visual Studio 2005 Visual Basic データベース:Oracle10g ご教授願います。 1つのクラスでデータベースへの接続メソッド・SQL文発行メソッド、切断メソッドを実装し、それらを状況に応じて呼び出し、データの取得を行いたいと考えております。 以下、ソースです。 --------クラスここから Public Class ConnectOracle  Public myConnection as New OracleConnection  Public Sub ConnectDB()・・・(1)   myConnection.ConnectionString = "User ID=scott;Password=tiger;Data Source=orcl"   myConnection.Open()  End Sub  Public Sub SqlDB()・・・(2)   Dim cmd As OracleCommand = New OracleCommand("SELECT * FROM EMP")   cmd.Connection = myConnection   cmd.CommandType = CommandType.Text   Dim reader As OracleDataReader = cmd.ExecuteReader()   ・・・・  End Sub  Public Sub DisConnectDB()・・・(3)   myConnection.Close()  End Sub --------クラスここまで Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  Dim Conn As New ConnectOracle・・・上記のクラス  Conn.ConnectDB()・・・(4)  Conn.SqlDB()・・・(5)  Conn.DisConnectDB()・・・(6) End Sub (4)実行でOracleに接続が行われ、クローズしていないのに、(5)を実行したときにはデータベースへの接続が切断されました。実装方法がおかしいでしょうか?

みんなの回答

  • HIROs-NET
  • ベストアンサー率78% (15/19)
回答No.1

「(5)を実行したときにデータベースへの接続が切断された」とありますが、実はOpen出来ていないということはないでしょうか? Openしたあとに OracleConnectionのStateプロパティで接続状況を確認してみてください

関連するQ&A

  • プロシージャまたは関数の引数が多すぎますのエラー

    お世話になります。 下記のコードを実行すると プロシージャまたは関数 spTest の引数が多すぎます どこが悪いのかご教示お願いいたします。 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Integer Dim conn As New SqlConnection(connstr) Dim cmd As New SqlCommand conn.Open() cmd.Connection = conn cmd.CommandText = "Delete Table2" cmd.CommandType = CommandType.Text Debug.WriteLine(cmd.ExecuteNonQuery()) For i = 1 To 100 spTest(cmd, i) Next conn.Close() End Sub sub spTest(ByRef cmd As SqlCommand, ByVal intID As Integer) Dim param As SqlParameter With cmd .CommandType = CommandType.StoredProcedure .CommandText = "spTest" param = .Parameters.Add(New _ SqlParameter("@ID", SqlDbType.Int)) param.Value = intID .ExecuteNonQuery()    ''''' ここで2回目からエラーが発生します End With End sub

  • VB.NET2005からoracle92へ接続するには?

    IDとパスワードを入力し、オラクルのDBにあるIDとパスワードだったら次の画面を開くというプログラムを作りたいです。 オラクルへの接続がうまく行ってないようで画面が固まってしまいます。 プログラムの不具合を教えていただけないでしょうか? よろしくお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New OleDb.OleDbConnection() Dim cmd As New OleDb.OleDbCommand() Dim rs As OleDb.OleDbDataReader cn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=*;User ID=*;Password=*;" cn.Open() '←ここで、エラーになります。 cmd = cn.CreateCommand() cmd.CommandText = "Select ID from abc" rs = cmd.ExecuteReader() While rs.Read() If TextBox1.Text = cmd.CommandText Then MessageBox.Show("パスワードを受付けました。") Dim frm2 As New Form2 frm2.Show() TextBox1.Clear() TextBox2.Clear() Else MessageBox.Show("パスワードが違います。") TextBox1.Text = "" TextBox1.Focus() TextBox1.Clear() TextBox2.Clear() End if     End While cn.Close() rs.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class

  • VB.NET2005からoracle92へ接続する方法。

    IDとパスワードを入力し、オラクルのDBにあるIDとパスワードだったら次の画面を開くというプログラムを作りたいです。 オラクルへの接続がうまく行ってないようで画面が固まってしまいます。 プログラムの不具合を教えていただけないでしょうか? よろしくお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New OleDb.OleDbConnection() Dim cmd As New OleDb.OleDbCommand() Dim rs As OleDb.OleDbDataReader cn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=*;User ID=*;Password=*;" cn.Open() '←ここで、エラーになります。 cmd = cn.CreateCommand() cmd.CommandText = "Select ID from abc" rs = cmd.ExecuteReader() While rs.Read() If TextBox1.Text = cmd.CommandText Then MessageBox.Show("パスワードを受付けました。") Dim frm2 As New Form2 frm2.Show() TextBox1.Clear() TextBox2.Clear() Else MessageBox.Show("パスワードが違います。") TextBox1.Text = "" TextBox1.Focus() TextBox1.Clear() TextBox2.Clear() End if     End While cn.Close() rs.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class

  • datagridviewからexcelへエクスポートしたい

    datagridviewからexcelへエクスポートしたい アクセス2000に接続をして、クエリから得られる結果をdatagridviewに表示は出来たのですが、 それをエクセルに吐き出す事が出来ずに苦慮しております。 Public Class form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim cn As OleDb.OleDbConnection _ = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\VB2008\xxxxx.mdb;") Dim cmd As New OleDb.OleDbCommand("Q1") cmd.CommandType = CommandType.TableDirect Dim da As New OleDb.OleDbDataAdapter() da.SelectCommand = cmd da.SelectCommand.Connection = cn Dim dt As New DataTable da.Fill(dt) DataGridView1.DataSource = dt End Sub 上記のコードでdatagridviewに表示は出来ました。 webで色々調べたのですが、サンプルとなるコードが見つからずの状態です。 サンプルとなるコードはありますでしょうか? そもそも、エクセルに吐き出す事は可能でしょうか? 可能であれば、どのようなコードを書けばよいでしょうか? 環境ですが、 XP(SP3)、 VB2008EXPRESS EDITION Access2000(SP3) Excel2007(SP2) 以上になります。 お忙しい所お手数をお掛けしますが、 ご教授下さい。 以上、宜しくお願いします。

  • ストアドプロシージャの実行について

    asp.net から sqlserver のストアドプロシージャを実行させる勉強をしています。 作成されているはずのストアドプロシージャを実行できずに困っています。 webformにテキストボックス、ボタン、データグリッドを貼り付け、ストアドプロシージャを作成し下記のプログラムを実行させるのですが上手くいきません。 (テキストボックスに任意で入力された数値のデータをボタンを押すと表示するものです) <エラー内容>→ ストアド プロシージャ 'proc1' が見つかりませんでした Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New SqlConnection Dim cmd As New SqlCommand cn.ConnectionString = "接続文字列" cmd.Connection = cn cmd.CommandText = "proc1" cmd.CommandType = System.Data.CommandType.StoredProcedure Dim p1 As SqlParameter = cmd.Parameters.Add("@param1", System.Data.SqlDbType.Int) p1.Value = TextBox1.Text cn.Open() Dim dr As SqlDataReader = cmd.ExecuteReader DataGrid2.DataSource = dr DataGrid2.DataBind() dr.Close() cn.Close() end sub ストアドproc1(場所:Northwind)の内容↓ CREATE procedure proc1 @param1 int as select * from products where categoryID=@param1 どなたか原因のわかる方がいれば、宜しくお願いします。

  • VB.Net SqlCommand 共通に

    お世話になります。 VB.Net 駆け出しの者です。 SqlCommand を使いストアドプロシジャーを実行して戻り値を DateSet にするような関数はプログラムを作っていくと、かなり多数になるようになりました。接続文字列だったり、いろいろ同じような記述が続いているなと思っておりました。 そこで、以下のような関数を作り、この部分を使いまわせないものかと思っております。 ストアドプロシジャーの名前や、そのほか必要な部分の文字はすべて変数にして、なんとか使えないのかなと思っているのですが、問題なのは、パラメータの部分でうまくいかないのです。 パラメータの部分だけ別関数にして、なんとかねじこめないかなと思っているのですが・・・ そもそもこういうやり方が正しいのかどうかもわからないのですが、その辺りも含めご教授いただければ幸いでございます。 何卒よろしくお願いいたします。 Public Function CommonDataSet(ByVal NameStored As String, ByVal CMDPara As SqlCommand, ByVal BasicTableName As String, ByVal ErrStr As String, ByVal ErrStrCaption As String) As DataSet     Dim SQLCon As SqlConnection = New SqlConnection(CMO.GetConnectStrings())     Try       CMDPara = New SqlCommand(NameStored, SQLCon)       CMDPara.CommandType = CommandType.StoredProcedure       SQLCon.Open()       Dim custDA As SqlDataAdapter = New SqlDataAdapter       Dim custDS As DataSet = New DataSet       ’この部分で下記の関数でパラメータを設定したいのですが、うまくいきません       custDA.SelectCommand = CMDPara       custDA.Fill(custDS, BasicTableName)       CommonDataSet = custDS     Catch ex As Exception       Err.Raise(Err.Number)       MessageBox.Show(ErrStr, ErrStrCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning)       CommonDataSet = Nothing     End Try     If SQLCon.State <> ConnectionState.Closed Then       SQLCon.Close()       SQLCon.Dispose()     End If End Function パラメータを設定する関数 上の関数の引数として設定したいのです  ByVal CMDPara As SqlCommand の部分のパラメータとして Private Function CommonPara(CMD As SqlCommand) As SqlCommand     CMD.Parameters.Clear()     CMD.Parameters.Add(New SqlParameter(パラメータ1の記述)     CMD.Parameters.Add(New SqlParameter(パラメータ2の記述)     CMD.Parameters.Add(New SqlParameter(パラメータ3の記述)     CommonPara = CMD End Function

  • GridView1の選択の指定とダミーデータの追加について

    GridView1とTwxtBox1を用意し GridView1に選択ボタンをつけ押すと、TextBox1にその行の1行目を表示するようにしたいのですが ★に何を入れたら、選択行を指定することができるのでしょうか?教えてください。 Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) TextBox1.Text = GridView1.Rows.Item(★).Cells(1).Text End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim conStr As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString Dim strSQL As String strSQL = "SELECT 1CELL FROM tableA" Using con As New SqlConnection(conStr) Using cmd As NEw SqlCommand(strSQL, con) Dim dr As SqlDataReader con.Open() dr = cmd.ExecuteReader(Data.CommandBehavior.CloseConnection) GridView1.DataSource = dr GridView1.DataBind() dr.Close() End Using End Using End Sub また、GridView1に出ているデータに選択するデータがない場合の為に データーベースにはなくても【-】というデータを常に表示できるようにしたいのですが どのようにしたらいいのでしょうか? 【tableAの1CELL】 AAAAA BBBBB CCCCC DDDDD - ←データベースにはこのデータはないけれどGridView1には常に表示し、これを選択するとTextBox1に【-】が入るようにしたいのですが よろしくお願いします。

  • データグッドビュー編集後のエラーについて

    VB初心者です。 (1)フォームロード時にアクセスのデータベースにアクセスし、データグリッドビューに表示 (2)フォーム上のデータグリッドビューを編集 (3)データベースに登録ボタン押下すると、フォーム上にあるデータグリッドビューをアクセスのデータベースに反映(update) というプログラムを作成中ですが、データベースに登録ボタンを押下すると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」とのエラーが出ます。 ネットで色々調べたのですが、よくわかりませんでした。 このエラー内容が分かる方、ご教示の程よろしくお願いします。 PC環境はWINXP+VS2008です。 Imports System.IO Imports System.Data.OleDb Public Class Form1 Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet = New DataSet("T_資料") Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '▼フォームロード時の処理 Dim cn1 As New OleDb.OleDbConnection("Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=" & Application.StartupPath & "\登録.mdb;") Dim cmd1 As New OleDb.OleDbCommand("SELECT * FROM T_資料", cn1) cn1.Open() Dim dAdp As OleDb.OleDbDataAdapter dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM T_資料", cn1) dAdp.Fill(dSet, "T_資料") DataGridView1.DataSource = dSet.Tables("T_資料") End Sub Public Sub cmd_Db_reg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Db_reg.Click '▼「データベースに登録」ボタンを押下したときの処理 Try Dim adapter As New tourokuDataSetTableAdapters.T_資料TableAdapter() dAdp.Update(dSet, "T_資料") MessageBox.Show("更新に成功しました。") Catch ex As Exception MessageBox.Show("更新に失敗しました。" + vbCr + ex.Message) End Try End Sub End Class

  • Disposeの動き

    VB2010でプログラム開発を行っています。 VB2010は初心者で、インターネットを使って調べながら構築していますので、ほとんど意味を理解していない状態です。 この度下記の文を書いたのですが、Point1で「Cmd.Dispose() 」を入れないとPoint2で「OleDbException が発生しました エラーを特定できません」のエラーになってしまいます。 そこで2つの疑問が出てきたので教えていただけないでしょうか。 疑問1: なぜ、Point1でDisposeしないとエラーになってしまうのか。 疑問2: Point1でDisposeすると、内容が破棄されると思っていたのですが、そのまま処理が進むようです。 なぜ、再度「Dim Cmd As New OleDbCommand」の宣言が必要無く、トランザクションも続いているのでしょうか。 また、よりスマートな書き方があればご教授いただけるとありがたいです。 よろしくお願いします。 Module Module1   Public Con As New OleDbConnection   Public Cmd As New OleDbCommand   Public bTrans As OleDb.OleDbTransaction   Public sb As New System.Text.StringBuilder() End Module Private Sub Btn_Kanryo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Kanryo.Click   Dim ExResult AS Integer        '新規トランザクションの開始。        bTrans = Con.BeginTransaction        'コマンドオブジェクトにトランザクション関連付け        Cmd.Transaction = bTrans        'DB更新1        sb = New System.Text.StringBuilder        sb.AppendLine("UPDATE A ")        sb.AppendLine("SET")        sb.AppendLine(" A_AA = '1'")        sb.AppendLine(" WHERE")        sb.AppendLine(" A_BB='123'")        Cmd.Connection = Con        Cmd.CommandText = sb.ToString        ExResult = Cmd.ExecuteNonQuery()        'ストアドプロシージャ―処理        Cmd.Connection = Con        Cmd.CommandType = CommandType.StoredProcedure        Cmd.CommandText = "AAA.ABC"        Dim outPara As New OleDbParameter("ERR_FLG", OleDbType.Decimal)        outPara.Direction = ParameterDirection.Output        Cmd.Parameters.Add(outPara)        Cmd.ExecuteNonQuery() Point1⇒ Cmd.Dispose()        'DB更新2        sb = New System.Text.StringBuilder        sb.AppendLine("DELETE ")        sb.AppendLine(" B")        sb.AppendLine(" WHERE ")        sb.AppendLine(" B_AA='1'")        Cmd.Connection = Con        Cmd.CommandText = sb.ToString Point2⇒ ExResult = Cmd.ExecuteNonQuery()        bTrans.Commit() End Sub

  • 同じコマンドボタンからマウスカーソルがはなれたら

    フォーム上のコマンドボタンにマウスカーソルが触れたら色を付ける、 同じコマンドボタンからマウスカーソルがはなれたら 、また色を変える、 という動きをvbaで行いたいのですが、 Private Sub cmd_test_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Me.cmd_test.BackColor = RGB(255, 180, 200) End Sub で、マウスカーソルが触れたら色を付けることはできたのですが、 マウスカーソルがそのコマンドボタンから離れたら色を変えるという動きができません。 Private Sub cmd_test_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Me.cmd_test.BackColor = RGB(255, 255, 255) End Sub Private Sub cmd_test_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Me.cmd_test.BackColor = RGB(255, 255, 255) End Sub Private Sub cmd_test_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Me.cmd_test.BackColor = RGB(255, 255, 255) End Sub をしても、マウスカーソルが離れても色が白になりませんでした。

専門家に質問してみよう