C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: MySQLDriverCSの使い方


(過去ログ 72 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■42387 / inTopicNo.1)  MySQLDriverCSの使い方
  
□投稿者/ sato (1回)-(2009/10/14(Wed) 20:26:30)

分類:[.NET 全般] 

初めまして MySQLDriverCSの使い方が解りません。
SQLのパラメータの設定でエラーがでてしまい困っています。
oAdapter.Fill(oDt)でプログラムは落ちます。

エラー内容は以下です。
PInvoke 関数 'MySQLDriverCS!MySQLDriverCS.CPrototypes::mysql_real_escape_string' がスタックを不安定にしています。PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。呼び出し規約、および PInvoke シグネチャのパラメータがターゲットのアンマネージ シグネチャに一致していることを確認してください。


何が原因か解らないので解るかたがいたらご教授願えませんでしょうか。
よろしくお願いします。


'ソースコード
Imports MySQLDriverCS 

Imports System.Text
Public Class clsDBMeisyo
    Private oDt As New DataTable
    Private oCon As New MySQLConnection(My.Settings.ConnectionString)
    Private oAdapter As New MySQLDataAdapter

    Public Sub New()

    End Sub


    Public Function 登録区分() As DataTable

        Dim oStr As New StringBuilder
        oStr.Append("SELECT B.S_MEISYOCD,")
        oStr.Append("B.S_MEISYO ")
        oStr.Append("FROM ")
        oStr.Append("TBL_MEISYO as A, ")
        oStr.Append("TBL_MEISYO_MSI as B ")
        oStr.Append("WHERE ")
        oStr.Append("A.S_MEISYOCD  = B.S_MEISYOCD ")
        oStr.Append("AND A.S_MEISYOCD  = ?ID ")


      
        oAdapter.SelectCommand = New MySQLCommand(oStr.ToString, oCon)
        oAdapter.SelectCommand.Parameters.Add("?ID", DbType.String)
        oAdapter.SelectCommand.Parameters("?ID").Value = "001"

        oAdapter.Fill(oDt)

        Return oDt

    End Function


End Class

引用返信 編集キー/
■42396 / inTopicNo.2)  Re[1]: MySQLDriverCSの使い方
□投稿者/ やじゅ (1382回)-(2009/10/15(Thu) 00:31:04)
やじゅ さんの Web サイト
No42387 (sato さん) に返信
> 何が原因か解らないので解るかたがいたらご教授願えませんでしょうか。

とりあえず、原因究明するために単純なSQLを試して、徐々にもとのSQLにしていくとか

引用返信 編集キー/
■42399 / inTopicNo.3)  Re[1]: MySQLDriverCSの使い方
□投稿者/ オショウ (337回)-(2009/10/15(Thu) 08:35:06)
No42387 (sato さん) に返信
> 初めまして MySQLDriverCSの使い方が解りません。

  MySQL や Connector のバージョンは?

> SQLのパラメータの設定でエラーがでてしまい困っています。
> oAdapter.Fill(oDt)でプログラムは落ちます。

  その部分の与え方が悪い・・・と思いませんか?

> 何が原因か解らないので解るかたがいたらご教授願えませんでしょうか。

  何か正常に動作するコードを書いて、そこから少しづつ拡張していくような
  書き方で正しい書き方を習得しないと・・・

  .NETなので、OleDbで、ACCESSのMDBでやってみるとか、SQL Server Express
  でやってみるとか・・・

  その辺のADO.NETの文法や使い方は同じです。

● どっかの掲示板で、この手の回答したんだが・・・

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim bRet As Boolean

        DataGridView1.DataSource = Nothing
        DataGridView1.DataMember = String.Empty

        Using MyDB As MySqlConnection = New MySqlConnection(GetDBConnectString())
            Try
                MyDB.Open()
                bRet = True
            Catch ex As Exception
                bRet = False
            End Try

            If bRet Then
                Dim szSQL As stringbuilder

                szSQL = New StringBuilder

                With szSQL
                    .Append("SELECT B.S_MEISYOCD,")
                    .Append("B.S_MEISYO ")
                    .Append("FROM ")
                    .Append("TBL_MEISYO as A, ")
                    .Append("TBL_MEISYO_MSI as B ")
                    .Append("WHERE ")
                    .Append("A.S_MEISYOCD  = B.S_MEISYOCD ")
                    .Append("AND A.S_MEISYOCD  = ?ID ")
                End With

                Using ds As DataSet = New DataSet
                    Using MyAD As MySqlDataAdapter = New MySqlDataAdapter
                        Using MyCMD As MySqlCommand = MyDB.CreateCommand
                            Dim MyParam As MySqlParameter

                            MyParam = New MySqlParameter("?ID", MySql.Data.MySqlClient.MySqlDbType.Int16)
                            MyParam.Value = CType(TextBox1.Text, Object)

                            With MyCMD
                                .CommandType = CommandType.Text
                                .CommandTimeout = MyDB.ConnectionTimeout
                                .CommandText = szSQL.ToString
                                .Parameters.Add(MyParam)
                            End With

                            With MyAD
                                .SelectCommand = MyCMD
                                .Fill(ds, "MEISYO")
                            End With
                        End Using

                        With DataGridView1
                            .DataSource = ds
                            .DataMember = "MEISYO"
                            .Refresh()
                        End With

                    End Using

                End Using

                MyDB.Close()
            End If
        End Using

    End Sub

    Private Function GetDBConnectString() As String

        Dim MyCon As MySqlConnectionStringBuilder

        MyCon = New MySqlConnectionStringBuilder

        With MyCon
            .ConnectionProtocol = MySqlConnectionProtocol.Sockets
            .ConnectionTimeout = 10
            .Database = "TEST"
            .PersistSecurityInfo = True
            .Server = "LocalHost"
            .UserID = "root"
            .Password = "hogehoge"
        End With

        Return MyCon.ToString

    End Function

  TextBox1 に、抽出したいIDの値を入れて、ボタンをクリックすれば
  DataGridView1 に結果を表示する・・・と言うサンプルです。

  流用して、勉強して下さい。

※ S_MEISYOCD は、Intにしてます。Stringではありません。
  DB的には、varcharではありません。

以上。

引用返信 編集キー/
■42401 / inTopicNo.4)  Re[2]: MySQLDriverCSの使い方
□投稿者/ sato (2回)-(2009/10/15(Thu) 10:20:39)
No42399 (オショウ さん) に返信
> ■No42387 (sato さん) に返信
>>初めまして MySQLDriverCSの使い方が解りません。
>
>   MySQL や Connector のバージョンは?
>
>>SQLのパラメータの設定でエラーがでてしまい困っています。
>>oAdapter.Fill(oDt)でプログラムは落ちます。
>
>   その部分の与え方が悪い・・・と思いませんか?
>
>>何が原因か解らないので解るかたがいたらご教授願えませんでしょうか。
>
>   何か正常に動作するコードを書いて、そこから少しづつ拡張していくような
>   書き方で正しい書き方を習得しないと・・・
>
>   .NETなので、OleDbで、ACCESSのMDBでやってみるとか、SQL Server Express
>   でやってみるとか・・・
>
>   その辺のADO.NETの文法や使い方は同じです。
>
> ● どっかの掲示板で、この手の回答したんだが・・・
>
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
>
> Dim bRet As Boolean
>
> DataGridView1.DataSource = Nothing
> DataGridView1.DataMember = String.Empty
>
> Using MyDB As MySqlConnection = New MySqlConnection(GetDBConnectString())
> Try
> MyDB.Open()
> bRet = True
> Catch ex As Exception
> bRet = False
> End Try
>
> If bRet Then
> Dim szSQL As stringbuilder
>
> szSQL = New StringBuilder
>
> With szSQL
> .Append("SELECT B.S_MEISYOCD,")
> .Append("B.S_MEISYO ")
> .Append("FROM ")
> .Append("TBL_MEISYO as A, ")
> .Append("TBL_MEISYO_MSI as B ")
> .Append("WHERE ")
> .Append("A.S_MEISYOCD = B.S_MEISYOCD ")
> .Append("AND A.S_MEISYOCD = ?ID ")
> End With
>
> Using ds As DataSet = New DataSet
> Using MyAD As MySqlDataAdapter = New MySqlDataAdapter
> Using MyCMD As MySqlCommand = MyDB.CreateCommand
> Dim MyParam As MySqlParameter
>
> MyParam = New MySqlParameter("?ID", MySql.Data.MySqlClient.MySqlDbType.Int16)
> MyParam.Value = CType(TextBox1.Text, Object)
>
> With MyCMD
> .CommandType = CommandType.Text
> .CommandTimeout = MyDB.ConnectionTimeout
> .CommandText = szSQL.ToString
> .Parameters.Add(MyParam)
> End With
>
> With MyAD
> .SelectCommand = MyCMD
> .Fill(ds, "MEISYO")
> End With
> End Using
>
> With DataGridView1
> .DataSource = ds
> .DataMember = "MEISYO"
> .Refresh()
> End With
>
> End Using
>
> End Using
>
> MyDB.Close()
> End If
> End Using
>
> End Sub
>
> Private Function GetDBConnectString() As String
>
> Dim MyCon As MySqlConnectionStringBuilder
>
> MyCon = New MySqlConnectionStringBuilder
>
> With MyCon
> .ConnectionProtocol = MySqlConnectionProtocol.Sockets
> .ConnectionTimeout = 10
> .Database = "TEST"
> .PersistSecurityInfo = True
> .Server = "LocalHost"
> .UserID = "root"
> .Password = "hogehoge"
> End With
>
> Return MyCon.ToString
>
> End Function
>
>   TextBox1 に、抽出したいIDの値を入れて、ボタンをクリックすれば
>   DataGridView1 に結果を表示する・・・と言うサンプルです。
>
>   流用して、勉強して下さい。
>
> ※ S_MEISYOCD は、Intにしてます。Stringではありません。
>   DB的には、varcharではありません。
>
> 以上。
解決済み
引用返信 編集キー/
■42402 / inTopicNo.5)  Re[3]: MySQLDriverCSの使い方
□投稿者/ sato (3回)-(2009/10/15(Thu) 10:21:17)
No42401 (sato さん) に返信
> ■No42399 (オショウ さん) に返信
>>■No42387 (sato さん) に返信
> >>初めまして MySQLDriverCSの使い方が解りません。
>>
>>  MySQL や Connector のバージョンは?
>>
> >>SQLのパラメータの設定でエラーがでてしまい困っています。
> >>oAdapter.Fill(oDt)でプログラムは落ちます。
>>
>>  その部分の与え方が悪い・・・と思いませんか?
>>
> >>何が原因か解らないので解るかたがいたらご教授願えませんでしょうか。
>>
>>  何か正常に動作するコードを書いて、そこから少しづつ拡張していくような
>>  書き方で正しい書き方を習得しないと・・・
>>
>>  .NETなので、OleDbで、ACCESSのMDBでやってみるとか、SQL Server Express
>>  でやってみるとか・・・
>>
>>  その辺のADO.NETの文法や使い方は同じです。
>>
>>● どっかの掲示板で、この手の回答したんだが・・・
>>
>> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
>>
>> Dim bRet As Boolean
>>
>> DataGridView1.DataSource = Nothing
>> DataGridView1.DataMember = String.Empty
>>
>> Using MyDB As MySqlConnection = New MySqlConnection(GetDBConnectString())
>> Try
>> MyDB.Open()
>> bRet = True
>> Catch ex As Exception
>> bRet = False
>> End Try
>>
>> If bRet Then
>> Dim szSQL As stringbuilder
>>
>> szSQL = New StringBuilder
>>
>> With szSQL
>> .Append("SELECT B.S_MEISYOCD,")
>> .Append("B.S_MEISYO ")
>> .Append("FROM ")
>> .Append("TBL_MEISYO as A, ")
>> .Append("TBL_MEISYO_MSI as B ")
>> .Append("WHERE ")
>> .Append("A.S_MEISYOCD = B.S_MEISYOCD ")
>> .Append("AND A.S_MEISYOCD = ?ID ")
>> End With
>>
>> Using ds As DataSet = New DataSet
>> Using MyAD As MySqlDataAdapter = New MySqlDataAdapter
>> Using MyCMD As MySqlCommand = MyDB.CreateCommand
>> Dim MyParam As MySqlParameter
>>
>> MyParam = New MySqlParameter("?ID", MySql.Data.MySqlClient.MySqlDbType.Int16)
>> MyParam.Value = CType(TextBox1.Text, Object)
>>
>> With MyCMD
>> .CommandType = CommandType.Text
>> .CommandTimeout = MyDB.ConnectionTimeout
>> .CommandText = szSQL.ToString
>> .Parameters.Add(MyParam)
>> End With
>>
>> With MyAD
>> .SelectCommand = MyCMD
>> .Fill(ds, "MEISYO")
>> End With
>> End Using
>>
>> With DataGridView1
>> .DataSource = ds
>> .DataMember = "MEISYO"
>> .Refresh()
>> End With
>>
>> End Using
>>
>> End Using
>>
>> MyDB.Close()
>> End If
>> End Using
>>
>> End Sub
>>
>> Private Function GetDBConnectString() As String
>>
>> Dim MyCon As MySqlConnectionStringBuilder
>>
>> MyCon = New MySqlConnectionStringBuilder
>>
>> With MyCon
>> .ConnectionProtocol = MySqlConnectionProtocol.Sockets
>> .ConnectionTimeout = 10
>> .Database = "TEST"
>> .PersistSecurityInfo = True
>> .Server = "LocalHost"
>> .UserID = "root"
>> .Password = "hogehoge"
>> End With
>>
>> Return MyCon.ToString
>>
>> End Function
>>
>>  TextBox1 に、抽出したいIDの値を入れて、ボタンをクリックすれば
>>  DataGridView1 に結果を表示する・・・と言うサンプルです。
>>
>>  流用して、勉強して下さい。
>>
>>※ S_MEISYOCD は、Intにしてます。Stringではありません。
>>  DB的には、varcharではありません。
>>
>>以上。
ありがとうございました。無事解決しました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -