• ベストアンサー
  • すぐに回答を!

C# を使って、ODBC経由でMySQLへアクセスしようと思い、あるサ

C# を使って、ODBC経由でMySQLへアクセスしようと思い、あるサンプルを用いてアクセス をしました。 その結果としては、正しくアクセスでき、サンプル通りに動きましたが、どうもそれぞれの 記述の意味がつかめません。。。 下の記述の中の(1)~(4)のところの記述の意味を教えて頂ければと思います。 (1)に関しては OdbcConnectiion というのがどういう使い方をしているのかわからず。。。 初心者で申し訳ありません。教えて下さい。 //Connection string for Connector/ODBC 3.51 string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=999.999.999.999;" + "DATABASE=TEST;" + "UID=TEST;" + "PASSWORD=******;" + "OPTION=3"; //Connect to MySQL using Connector/ODBC (1) OdbcConnection MyConnection = new OdbcConnection(MyConString); MyConnection.Open(); //Create a sample table OdbcCommand MyCommand = new OdbcCommand("DROP TABLE IF EXISTS my_odbc_net", MyConnection); (2) MyCommand.ExecuteNonQuery(); MyCommand.CommandText = "CREATE TABLE my_odbc_net(id int, name varchar(20), idb bigint)"; MyCommand.ExecuteNonQuery(); //Insert MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(10,'venu', 300)"; Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery()); ; //Fetch MyCommand.CommandText = "SELECT * FROM my_odbc_net"; (3) OdbcDataReader MyDataReader; (4) MyDataReader = MyCommand.ExecuteReader(); while (MyDataReader.Read()) { //Supported only by Connector/ODBC 3.51 Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " + MyDataReader.GetString(1) + " " + MyDataReader.GetInt64(2)); }

共感・応援の気持ちを伝えよう!

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2

C# に関する書籍は買いましたか? または入門サイトは見てますか? (3) の質問は ODBC とか関係なく、ただ単に変数を宣言してるだけの行。初歩の初歩です。 ここの QA を通じて C# をステップ バイ ステップで習うことはできません。それに付き合ってくださる回答者はいません。 基本的な事は、基本から応用まで順番に習うことができる媒体を使って勉強してください。 その他の質問項目も、わからない単語を選択して [F1] を押せばヘルプが出るので概要はつかめるはずです。 (1) OdbcConnection MyConnection = new OdbcConnection(MyConString); http://msdn.microsoft.com/ja-jp/library/at2sk77y(v=VS.85).aspx (2) MyCommand.ExecuteNonQuery(); http://msdn.microsoft.com/ja-jp/library/system.data.odbc.odbccommand.executenonquery(v=VS.85).aspx (3) OdbcDataReader MyDataReader; http://msdn.microsoft.com/ja-jp/library/system.data.odbc.odbcdatareader(v=VS.85).aspx (4) MyDataReader = MyCommand.ExecuteReader(); http://msdn.microsoft.com/ja-jp/library/bhcdfhz9(v=VS.85).aspx

共感・感謝の気持ちを伝えよう!

質問者からのお礼

クラスを勉強しなければ、やはり理解は難しいですね。。。  ありがとうございました。

その他の回答 (1)

  • 回答No.1

お疲れ様です。 失礼ですが、c#やc++で独自のクラスを作られたことはあられますでしょうか? もし、あられていて意味が分からないとしたら問題でしたので。。。 まずは、(1)だけ。。。 (1)について OdbcConnectionというクラスがSDK等で新しく宣言されていて、そのクラスを使用してオブジェクトを生成しています。 引数に設定等を記載した文字列型(string)を指定すると、それに従った内容でオブジェクトを生成(コンストラクタが動く)しているようです。

参考URL:
http://www.stackasterisk.jp/tech/dotNet/csharp02_01.jsp

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • VBからのODBC接続でSQLエラー

    DBバージョン:MySQL5 ODBCバージョン:ODBC3.51 言語:VB2003 を利用し VBからSQLを発行した際、1バイト文字の場合は問題はなく SQL文内に日本語を含むとハンドルされていない旨のシステムエラーが出てしまいます SQLAdminからStatusコマンドDBのキャラクタセット情報を確認してもSJISとして設定されており またコンソールから直接SQL文を打ち込んでも正常に動作いたします My.iniファイルも文字コードはSJISに置き換えてあり 何が原因かつかめません *VBコード Dim MyConString As String Dim MyConnection As OdbcConnection Dim strSQL As String Dim myOdbcCommand As OdbcCommand Dim iRet As String MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + _ "SERVER=localhost;" + _ "PORT=3306;" + _ "DATABASE=kanri_db;" + _ "UID=xxxx;" + _ "PASSWORD=xxxx;" + _ "OPTION=3;" + _ "CHARSETENCODING=sjis" 'Connection MyConnection = New OdbcConnection(MyConString) 'myConn.Open() MyConnection.Open() Console.WriteLine("Connection State::" & MyConnection.State.ToString) 'SQL strSQL = "select csv_subitem from tbl_readtempcsv where csv_subitem='ワークグループ';" myOdbcCommand = MyConnection.CreateCommand myOdbcCommand = New OdbcCommand myOdbcCommand.Connection = MyConnection myOdbcCommand.CommandType = CommandType.Text myOdbcCommand.CommandText = strSQL iRet = myOdbcCommand.ExecuteNonQuery どなたかご教示いただけないでしょうか 宜しくお願いいたします

    • ベストアンサー
    • MySQL
  • MYSQLについて教えてください!

    お世話になります。 VB.net+MYSQLで開発してます。 MYSQLで聞きたいことがあるのですが、 今やろうとしている処理が 配列の要素数分ループ処理でインサートしようとしています。 しかし書き方が悪いのか配列名(カウンタ)という記述だと Functionに見られてしまいます。 それならと配列の要素を変数に代入して INSERTには変数をあてているのですが 変数が展開されません。。。 PHPとかだと変数の前に「.$」をつけると出来ると書いてあったのですが VBにも特殊なルールがあるのでしょうか? 以上よろしくお願いします。 以下サンプルソースです。(接続等はぶいてますが接続はできてます) Dim a As String Dim sqlstr As String Dim sqlcommand As Odbc.OdbcCommand for i as Integer = 0 to uBound(data_array) '初期化 a = "" '変数に値を設定 a = data_array(i) 'SQL文字列の設定 sqlstr = "insert into test( col_1 )" + _ "values(a);" sqlcommand.CommandText = sqlstr sqlcommand.ExecuteNonQuery() next

  • VB2008の文字列のエンコードについて

    環境:VB 2008 ExpressEdition SP1 データベース:MySQL5.0 上記の環境にて、カラムから文字列を取得しようとしているのですが 元々サーバー側のエンコードが今回作るアプリ専用に設計された訳ではなく、PHP等での閲覧に対応する為ににキャラクタセットをUTF-8で設計、運用しています。 ODBC3.51を用いて、データベースに接続しデータを取得しようとしているのですが、取得したデータが文字化けを起こしてしまいます。 Debug.Print(hoge)で出る、デバッグの文字列が ???? ?? となってしまいます。 文字列をエンコードする為の手立てをお教え願えませんでしょうか。 よろしくお願いいたします。 'SQLの設定 strsql = "SELECT * FROM HOGE" MyConnection.Open() Dim MyCommand As New OdbcCommand MyCommand.Connection = MyConnection MyCommand.CommandText = strsql Dim MyDataReader As OdbcDataReader MyDataReader = MyCommand.ExecuteReader While MyDataReader.Read() Debug.Print(CStr(MyDataReader("hoge"))) End While

  • VB.NET DataReaderが開かれている

    おはようございます。 今回はVB.NETについて質問させてください。 【開発環境】 ・VB.NET(Visual Studio2010) ・PostgreSQL8.3 ・WindowsXP 【質問内容】 ある一定の操作をすると、 『この Command に関連付けられている DataReader が既に開かれています。このコマンドを最初に閉じる必要があります』 とエラーが出てしまい、例外で落ちてしまいます。 【落ちる原因の操作】 1.メインフレームを起動 2.親品番マスタから取得した親品番一覧を表示しているListViewの1件をダブルクリック 3.親品番に紐付いている子品番を品番テーブルから取得 4.表示内容の切り替えラジオボタンを全て⇒図面ありに変更 5.表示内容の切り替えラジオボタンを図面あり⇒全てに変更 6.表示内容の切り替えラジオボタンを全て⇒図面ありに変更 7.表示内容の切り替えラジオボタンを図面あり⇒全てに変更←ここで先ほどの例外が発生する。 【該当部分のソース】 Private Sub ArticleTableUpdate(ByVal sParents As String) Dim articleResult As Odbc.OdbcDataReader ' 品番テーブル用 Dim articleSql As String Dim zumenSql As String Dim sChild As String Dim articleCount As Integer Dim zumenCount As Integer Dim zumenFlag As String ' 品番テーブルからデータを取得するSQLを作成 articleSql = "SELECT * FROM ""ARTICLE_TBL"" WHERE ""P_ARTICLE_NUMBER"" = '" + sParents + "'" Debug.WriteLine("【ArticleTableUpdate】 品番テーブルからデータを取得SQL:" + articleSql) ODBCCommand.CommandText = articleSql ' 品番テーブルから該当の親品番のデータ件数を取得 'articleCount = ODBCCommand.ExecuteNonQuery() ' 品番テーブルに該当の親品番のデータが存在するか 'If articleCount = 0 Then 'Exit Sub 'End If ' 品番テーブルから該当の親品番のデータを取得 articleResult = ODBCCommand.ExecuteReader() ←ここで例外発生 ' 取得した件数分処理 While articleResult.Read() ' 子品番データを取得 sChild = articleResult("C_ARTICLE_NUMBER").ToString If sChild <> "" Then ' 子品番データをキーに図面マスタからデータを取得するSQLを作成 zumenSql = "SELECT * FROM ""ZUMEN_MST"" WHERE ""PLAN_NUMBER"" = '" + sChild + "'" Else sParents = articleResult("P_ARTICLE_NUMBER").ToString zumenSql = "SELECT * FROM ""ZUMEN_MST"" WHERE ""PLAN_NUMBER"" = '" + sParents + "'" End If Debug.WriteLine("【ArticleTableUpdate】 図面マスタからデータを取得SQL:" + zumenSql) ODBCCommand2.CommandText = zumenSql ' 図面マスタから該当の品番のデータの件数を取得 zumenCount = ODBCCommand2.ExecuteNonQuery ' 図面マスターに該当の品番のデータが存在するか If zumenCount = 0 Then ' 図面データが存在しない為、更新値を0とする zumenFlag = "0" Else ' 図目データが存在する為、更新値を1とする zumenFlag = "1" End If ' 品番テーブルを更新するSQLを作成 zumenSql = "UPDATE ""ARTICLE_TBL"" " + vbCrLf + "SET " + vbCrLf + vbTab + """C_ARTICLE_NUMBER"" = '" + sChild + "', " + vbCrLf + vbTab + """PLAN_FLAG"" = '" + zumenFlag + "', " + vbCrLf + vbTab + """UPDATE_DATE"" = '" + Today + "'" + vbCrLf + "WHERE ""P_ARTICLE_NUMBER"" = '" + sParents + "'" Debug.WriteLine("【ArticleTableUpdate】 品番テーブルを更新するSQL:" + zumenSql) ODBCCommand2.CommandText = zumenSql ' 品番テーブルを更新 zumenCount = ODBCCommand2.ExecuteNonQuery() End While articleResult.Close() ODBCCommand = New Odbc.OdbcCommand ODBCCommand.Connection = ODBCSession End Sub 【DB接続関数】 Public Function ODBC_CONNECT() As Boolean ' 戻り値をセット ODBC_CONNECT = False If ConnectFlag = False Then Try ODBCSession = New Odbc.OdbcConnection ODBCCommand = New Odbc.OdbcCommand ODBCCommand2 = New Odbc.OdbcCommand ' データベース接続情報 ODBCSession.ConnectionString = "Provider=MSDASQL;DSN=HOGE;UID=hogeU;PWD=hogeP;" ODBCCommand.Connection = ODBCSession ODBCCommand2.Connection = ODBCSession ' データベースに接続 ODBCSession.Open() ConnectFlag = True ODBC_CONNECT = True Catch Debug.WriteLine("えらー") End Try End If End Function 今のところ、このエラーが発生した場合、再起動すると発生しなくなるみたいです。(たまたまそうなったのかもしれません) 何か原因がわかる方、ご教授お願い致します。

  • Windows Server 2003上でMySQLを動作させる場合

    Windows Server 2003上でMySQLを利用したいと考えています。 IIS上のASPでMySQLにアクセスするためのコネクタとしてMyODBCというものを見つけましたが、他にこれに類するものはありますか?MyODBCを利用するのがベストでしょうか。 MyODBCについて調べていて次のページを見つけました。 http://tsuttayo.sytes.net/mysql/odbc/vb.html サンプルコードでコネクションをOpenする際に、ユーザー名・パスワードを指定していないのですが、MySQLはパスワードによるアクセス制限はかけられないものなのでしょうか。 すみません。初歩的な質問かもしれませんが、宜しくお願いします。

    • ベストアンサー
    • MySQL
  • UTF8のテーブルをODBCドライバ経由のMS Accessから開くと日本語が文字化けする

    IIS5.1 MySQL 5.0.24a PHP 5.2.2 phpMyAdmin 3.0.0 文字コードを全てUTF8に統一したよる簡単な会員管理DBの作り方を勉強しています。 このページを参考に、http://www.tryhp.net/ODBCMySQL.htm ODBCドライバ(mysql-connector-odbc-3.51.27-win32.msi)をインストールし、 MS Access 2003で開いたところ、テーブルへのリンクはうまくいくのですが 日本語部分が文字化けしてしまいます。 テーブルをExcelに落としてリンクさせれば化けないのですけど、何か設定ミスを してますでしょうか。 コントロールパネル→管理ツール→データソース(ODBC)→システムDSNタブ →構成ボタン→Connect Optionsタブ→Chatacter Setは、UTF8にしてあります。

    • ベストアンサー
    • MySQL
  • Access2019でMySQLデータ更新で障害

    初めてご質問します。 Access2019でMySQL(5.7.24)にODBC接続し、直接テーブルを更新したり、フォームからデータ挿入しようとすると、参照も更新もできるのですが、頻繁にAccessが強制終了してしまいます。 環境は以下の通りです。  OS:WindowsServer2016  Access:2019  MySQL:5.7.24  その他:Access、MySQLとも同じサーバー上にインストール  ODBCドライバー:mysql-connector-odbc-8.0.27-win32   MySQLは初の設定のため、ネットなどを参考にインストール、ODBCも無事に接続でき、Access上で作成していたデータを投入して、フォームからのデータ登録を試したところ、頻繁にエラーが発生してAccessが落ちてしまいます。 不思議に思い、AccessよりODBCでリンクを張っているテーブルを参照し、ごみデータの削除をすると同様にAccessが落ちることから、AccessとMySQLDBとの通信等等の障害と感じています。 OSのイベントビューワーでも、Applicationのエラーに複数のエラーが確認できました。 ・障害が発生しているアプリケーション名: MSACCESS.EXE、 ・Aborted connection 4 to db: ・障害バケット 1366483222980313419~ 当初はmysql_upgradeが発生していたので実行しました。 こちらを完了したところmysql_upgradeは表示されなくなりました。 同様にAccess2019も更新し、最新になっています。 AccessからODBC接続をさせ、安定して稼働させるには、どのようにしたらよいか、お知恵をお貸しいただけないでしょうか。

    • ベストアンサー
    • MySQL
  • MYSQLとEXCEL2003の接続エラー

    64bit windows7に、32bitのexcel2003を使用しています。 excel2003から外部データ取り込みで、MYSQLのデータを送受信できるようにしたいです。 ネットでは、mysql-connector-odbc-5.2.6-win32.msi と32bit版をインストールしたほうが良いとの書き込みを見たことがありますが、 mysql-connector-odbc-5.1.13-winx64.msi をインストールしないと、ODBCのデータソースにドライバーが出てきませんので、こちらをインストールしました。 写真のとおり、ユーザーDSN、システムDSNでは、ドライバーを追加して、コネクション-サクセスフルになるのですが、 実際 excel2003から、外部データの取り込みで、ODBCのデータソースを選択すると、データリンクプロパティ画面が現れてしまい、そこで設定を入力しても、写真のようなエラーが出てしまいます。 どのように対処すればよいか、アドバイスいただけないでしょうか。

  • VB.netからMySQLへの接続

     以前に、同じ質問をさせていただき、私の環境ではプロバイダエクスプローラが使えないというところまで教えていただきました。  その後、なんとかプログラムで接続を成功させようと奮闘してみたのですが、良いサンプルが見つからず、結局頓挫してしまいました。  現在、ODBCドライバをインストールし、Mycrosoft.Data.Odbc.dllを参照に追加までたどりついたところです。 分からないなりに、かろうじて見つけたサンプルを基に、以下のプログラムを書いてみました。 最初に Imports Microsoft.Data.Odbcとし、 以下、 Dim cn As New OdbcConnection Dim cm As New OdbcCommand Try cn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" & _ "SERVER=XXXX;PORT=3306;" & _ "DATABASE=XXXX;UID=root;PASSWORD=XXX;OPTION=3" cn.Open() 因みに、Privateで書くと、最初の構文の「Imports」がエラー(青い波線)になったため、フォームの追加で、モジュールを追加し、「Module1」を作成してから、そこにプログラムを書いています。  本当に始めたばかりのド素人ですので、質問自体分かり辛いかと思いますが、どなたか、ご教授ねがえますか?  よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Mysqlへの接続に関して

    MysqlへVisual Studio 2008 のC#で接続しようとしています。 接続方法としては、クライアントから"mysql-connector-net-6.1.5"をインストールして ODBCを使わずに接続しようとしています。 参照設定で、"MySql.data"を指定し、以下のように記述しましたが、どうしても下記の ようなエラーが出力されてしまいます。 原因がわかりましたら教えて頂きたいと思います。 《記述内容》 using MySql.Data.MySqlClient; string sqlcmd = "userid=root;" + "password=000000;" + "database=db_name;" + "Host=999.999.999.999"; string cmdstr, cmdcnt; cmdstr = "select * from t_user ;"; MySqlDataReader reader = null; MySqlConnection conn = new MySqlConnection(sqlcmd); //MySQLコマンド MySqlCommand selcmd = new MySqlCommand(cmdstr, conn); //MySQL接続 conn.Open(); この conn.Open(); のところで下記のエラーが出てしまう。 //エラー内容 Unable to connect to any of the specified MySQL hosts. よろしくお願いします。

    • ベストアンサー
    • MySQL