- PR -

C#でDB接続

投稿者投稿内容
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-05-01 15:56
恐れ入ります。
C#に関して質問させて下さい。

C#を始めたばかりで、DB接続を行なってみようとしたところ、
下記エラーが出て、対処法がいまいち分かりません。

どなたかアドバイスを頂ければ幸いです。

<環境>
DB:Oracle8i
platform:Visual C#.net(English version)
Microsoft Development Environment 2002 Version7.0.9466
Microsoft .NET Framework 1.0

OS: Windows2000 Professional


<サンプルコード>
下記のコードは、フォーム上にボタンがひとつありまして、押すと、
レコードカウントが表示されるという単純なものを意識しています。

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;


namespace WindowsApplication2
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button blnTest;
private System.ComponentModel.Container components = null;

public Form1()
{
InitializeComponent();

}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
private void InitializeComponent()
{
this.blnTest = new System.Windows.Forms.Button();
this.SuspendLayout();
this.blnTest.Location = new System.Drawing.Point(40, 32);
this.blnTest.Name = "blnTest";
this.blnTest.Size = new System.Drawing.Size(88, 32);
this.blnTest.TabIndex = 0;
this.blnTest.Text = "button1";
this.blnTest.Click += new System.EventHandler(this.blnTest_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.blnTest});
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void blnTest_Click(object sender, System.EventArgs e)
{

String sConnectionString = "Provider=MSDAORA;User ID=taro;password=taro01 ; Data Source = test;Persist Security Info=False";



String mySelectQuery = "SELECT * FROM TEST_USER_TABLE";

OleDbConnection myConnection = new OleDbConnection(sConnectionString);

OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);

myConnection.Open();
///この箇所でエラーが出ます。

OleDbDataReader myReader = myCommand.ExecuteReader();


int RecordCount=0;
try
{
while (myReader.Read())
{
RecordCount = RecordCount + 1;
MessageBox.Show(myReader.GetString(0).ToString());
}
if (RecordCount == 0)
{
MessageBox.Show("No data returned");
}
else
{
MessageBox.Show("Number of records returned: " + RecordCount);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
myReader.Close();
myConnection.Close();
}



}
}
}

上記コードを実行したところ、下記の警告が出ました。
An unhandled exception of type System.Data.OleDb.OleDbException occurred in
system.data.dll

それから、下記のコードに関してですが、
String sConnectionString = "Provider=MSDAORA;User ID=taro;password=taro01 ; Data Source = test;Persist Security Info=False";

たとえば、DBのユーザーがtaro、パスワードがtaro01、DBがtestなら、この書き方で
OKなんでしょうか?

初歩的な質問で申し訳ありません。



囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-05-01 16:05
接続文字列に関しては
http://www.connectionstrings.com/
ここが参考になります。
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-01 16:06
ソース コードを全部貼り付ける必要はないような... (;^-^)
この場合は、OleDbConnection の部分だけで良いはずです。

引用:

鼻セレブさんの書き込み (2006-05-01 15:56) より:

String sConnectionString = "Provider=MSDAORA;User ID=taro;password=taro01 ; Data Source = test;Persist Security Info=False";


接続文字列に問題はないようですが、SQL Plus などで接続はできますか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-05-01 16:23
囚人さん、じゃんぬねっとさん、返信ありがとうございました。


ソースコードの件、申し訳ありませんでした。

ちなみに、Connectionの箇所は、マイクロソフトのホームページを参照して、
記載しました。また、じゃんぬさんが記載して頂いたSQLPlusにも問題なく
Connectできています。

他に、環境設定(.net内で)をしなければならないのでしょうか?

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-01 16:38
引用:

鼻セレブさんの書き込み (2006-05-01 16:23) より:

他に、環境設定(.net内で)をしなければならないのでしょうか?


ないです、実際に私は接続できています。
Oracle 8.1.7 以上であれば問題なく今のコードで Open はできると思います。

Oracle Provider for OLE DB のバージョンがおかしいのかな?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-05-01 16:45
じゃんぬさん、

返答ありがとうございます。
今、select * from v$instanceでversionを見たところ、
8.1.6.0.0でした。これが、不具合の原因でありましょうか?

ということは、Oracle Provider for OLE DB のversionもこれに
あわせる必要があるのでしょうか?

よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-01 17:02
引用:

鼻セレブさんの書き込み (2006-05-01 16:45) より:

ということは、Oracle Provider for OLE DB のversionもこれに
あわせる必要があるのでしょうか?


たとえば、Oracle Provider for OLE DB が 8.1.7 であれば、
接続先データベースが 7.3.4 以上のものをサポートできます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-05-01 17:15
じゃんぬさん、

返答ありがとうございました。

Oracleのホームページより、OLEをダウンロードしております。
ダウンロード後に、もう一度、セットアップして、やってみます。

ありがとうございました。


スキルアップ/キャリアアップ(JOB@IT)