Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: работа с MySQL из VB.NET Не получается Добавлено: 30.11.05 21:47  

Автор вопроса:  student-uni
Мне надо работать с MySQL из VB.NET

Пробую ODBC - не коннектит, не открывает в общем не может пространство имён ОДБС с МуСКуЛом работать.
/Не понимаю почему но это не важно./

Я поставил MySQLDriverCS драйвер MySQL для VB.NET скачанный с сайта MySQL. Появились дополнительные пространства имён типа
MySqlDbConnection MySqlDbAdapter.

Теперь вроде могу соединиться с базой
Но ничего не могу в ней сделать.

ExecuteNonQuery() кричит про ошибку типов

Решения видел самые разные: через пространство АДОДБ,
Через дополнительные АДО для MySql.
Но хотелось бы не уходить от встроенного синтаксиса OLEDB ODBC (oleDbConnecton oleDbCommand итд).

Буду благодарен если кто поможет разобраться как выполнить хоть какую нибудь инструкцию для MySql.




Imports MySQLDriverCS

   Dim conn As MySQLConnection = New MySQLConnection("host=localhost; Database=MySQL; user=root; password=; port=3306")

        Dim a, b, c As String
        a = "HostA"
        b = "UserB"
        c = "PasswordC"

        Dim strAbfrage As String = "INSERT INTO MySql.user  (Host, User, passwort) VALUES ( '" + a + "', '" + b + "', '" + c + "'  ) "

        Dim cmdString As String = "SELECT * FROM func "

        ' Create a mysql command
        Dim cmd As MySQLCommand = New MySQLCommand(strAbfrage, conn)

        conn.Open()

        cmd.ExecuteNonQuery()

        conn.Close()

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 01.12.05 09:25
/Не понимаю почему но это не важно./

Как раз это важно.
Строку ODBC-соединения в студию. И ошибку, которую она вызывает.

Ответить

Номер ответа: 2
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #2 Добавлено: 01.12.05 17:26
спасибо что откликнулись :-)

Я сейчас не на месте, проверить смогу только в Пн.
Но ситуация была по памяти такая:
Для всех строк кроме последней компиляр орал что в строке соединения нету Провайдера.
А на последнюю, если не ошибаюсь, он ругался что нету какбы такого SQL-провайдера.
Я и мастером АДО пробовал - не предлагает он такого провайдера.

Ещё одна проблема. Обратите внимание на коннектную строку в вышеприведенном примере !
Она коннектит по
"host=localhost; user=root; password=; port=3306
хотя я собственноручно поставил логин и пароль в СКУЛ-админе. В то время когда я ввожу настоящее доменное имя компа логин и пароль - не коннектит.
/но это уже второй вопрос. Больше меня мучает первый/


Driver={mySQL};Server=localhost;Option=16834;Database=mydatabase;"

";Driver={mySQL};Server=data.domain.com;Port=3306; Option=131072;Stmt=;Database=my-database;Uid=username;Pwd=password;"

";DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost; DATABASE=myDatabase;USER=myUsername; PASSWORD=myPassword;OPTION=3;"

DRIVER={MySQL ODBC 3.51 Driver}; SERVER=data.domain.com;PORT=3306; DATABASE=myDatabase; USER=myUsername;PASSWORD=myPassword;OPTION=3;"

"Provider=MySQLProv;Data Source=mydb;User Id=UserName;Password=myPassword;"

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 01.12.05 17:59
А, собственно, был ли скачан и установлен ODBC-драйвер MySQL?
Потому что Driver={mySQL} - это правильно как раз.

Ответить

Номер ответа: 4
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #4
Добавлено: 01.12.05 23:07
Да для чего нужно это ODBC все прекрасно работает
Разыскивай


ByteFX.Data.dll
ByteFX.MySqlClient.dll


Вот пример и никуда уходить не надо :)
Кусок из наработок искать интересующий тебя кусок неохота сам ищи :)

Imports MySql.Data.MySqlClient
Imports System.IO
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Button2 As System.Windows.Forms.Button
    Friend WithEvents Button3 As System.Windows.Forms.Button
    Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
    Friend WithEvents Button4 As System.Windows.Forms.Button
    Friend WithEvents Button5 As System.Windows.Forms.Button
    Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog
    Friend WithEvents Button6 As System.Windows.Forms.Button
    Friend WithEvents NumericUpDown1 As System.Windows.Forms.NumericUpDown
    Friend WithEvents Button7 As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        Me.Button2 = New System.Windows.Forms.Button
        Me.Button3 = New System.Windows.Forms.Button
        Me.DataGrid1 = New System.Windows.Forms.DataGrid
        Me.Button4 = New System.Windows.Forms.Button
        Me.Button5 = New System.Windows.Forms.Button
        Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog
        Me.Button6 = New System.Windows.Forms.Button
        Me.NumericUpDown1 = New System.Windows.Forms.NumericUpDown
        Me.Button7 = New System.Windows.Forms.Button
        CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
        CType(Me.NumericUpDown1, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(16, 208)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(80, 24)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "write"
        '
        'Button2
        '
        Me.Button2.Location = New System.Drawing.Point(104, 208)
        Me.Button2.Name = "Button2"
        Me.Button2.TabIndex = 1
        Me.Button2.Text = "delete"
        '
        'Button3
        '
        Me.Button3.Location = New System.Drawing.Point(192, 208)
        Me.Button3.Name = "Button3"
        Me.Button3.TabIndex = 2
        Me.Button3.Text = "read"
        '
        'DataGrid1
        '
        Me.DataGrid1.DataMember = ""
        Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
        Me.DataGrid1.Location = New System.Drawing.Point(8, 16)
        Me.DataGrid1.Name = ";DataGrid1"
        Me.DataGrid1.Size = New System.Drawing.Size(488, 176)
        Me.DataGrid1.TabIndex = 3
        '
        'Button4
        '
        Me.Button4.Location = New System.Drawing.Point(280, 208)
        Me.Button4.Name = "Button4"
        Me.Button4.TabIndex = 4
        Me.Button4.Text = "write blob"
        '
        'Button5
        '
        Me.Button5.Location = New System.Drawing.Point(376, 192)
        Me.Button5.Name = "Button5"
        Me.Button5.TabIndex = 5
        Me.Button5.Text = "Button5"
        '
        'Button6
        '
        Me.Button6.Location = New System.Drawing.Point(488, 208)
        Me.Button6.Name = "Button6"
        Me.Button6.TabIndex = 6
        Me.Button6.Text = "getBlobSize"
        '
        'NumericUpDown1
        '
        Me.NumericUpDown1.Location = New System.Drawing.Point(504, 96)
        Me.NumericUpDown1.Name = "NumericUpDown1"
        Me.NumericUpDown1.Size = New System.Drawing.Size(64, 20)
        Me.NumericUpDown1.TabIndex = 7
        '
        'Button7
        '
        Me.Button7.Location = New System.Drawing.Point(376, 216)
        Me.Button7.Name = "Button7"
        Me.Button7.TabIndex = 8
        Me.Button7.Text = "readnew"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(592, 245)
        Me.Controls.Add(Me.Button7)
        Me.Controls.Add(Me.NumericUpDown1)
        Me.Controls.Add(Me.Button6)
        Me.Controls.Add(Me.Button5)
        Me.Controls.Add(Me.Button4)
        Me.Controls.Add(Me.DataGrid1)
        Me.Controls.Add(Me.Button3)
        Me.Controls.Add(Me.Button2)
        Me.Controls.Add(Me.Button1)
        Me.Name = "Form1"
        Me.Text = "Form1"
        CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
        CType(Me.NumericUpDown1, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)

    End Sub

#End Region
    Function strDBconn(ByVal user As String, ByVal pwd As String, ByVal dbsource As String, ByVal dbname As String) As String

        Dim DataSource As String = dbsource
        Dim Database As String = dbname
        Dim UserID As String = user
        Dim Password As String = pwd
        Dim MyConString As String = ";DataSource = " + DataSource + ";Database=" + Database + ";User ID=" + UserID + ";Password=" + Password
        Return MyConString

    End Function
    Sub InsertRow(ByVal myConnectionString As String)

        ' If the connection string is null, use a default.
        If myConnectionString = "" Then
            myConnectionString = ";Database=Test;Data Source=localhost;User Id=root;Password=12345678"
        End If
        Dim myConnection As New MySqlConnection(myConnectionString)
        Dim myInsertQuery As String = "INSERT INTO temp (numin, numout, path) Values('10012', '23', '444')"
        Dim myCommand As New MySqlCommand(myInsertQuery)
        myCommand.Connection = myConnection
        myConnection.Open()
        myCommand.ExecuteNonQuery()
        myCommand.Connection.Close()

    End Sub
    Sub insparam(ByVal myConnectionString As String)

        If myConnectionString = "" Then
            myConnectionString = ";Database=Test;Data Source=localhost;User Id=root;Password=12345678"
        End If
        Dim myConnection As New MySqlConnection(myConnectionString)
        Dim myInsertQuery As String = ";DELETE FROM temp WHERE id>@myid"
        Dim myCommand As New MySqlCommand(myInsertQuery)
        myCommand.Parameters.Add("@myid", 35)
        myCommand.Connection = myConnection
        myConnection.Open()
        myCommand.ExecuteNonQuery()
        myCommand.Connection.Close()
    End Sub
    Sub writeblob(ByVal myConnectionString As String)
        Dim tFileName As String
        OpenFileDialog1.InitialDirectory = "c:\"
        OpenFileDialog1.RestoreDirectory = True

        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            tFileName = OpenFileDialog1.FileName
        End If

        Dim pdf As FileStream = New FileStream(tFileName, FileMode.Open, FileAccess.Read)
        Dim r As New BinaryReader(pdf)
        Dim myblob() As Byte
        myblob = r.ReadBytes(pdf.Length)
        Dim mb As MySqlDbType = MySqlDbType.LongBlob
        Dim a As Integer = myblob.GetLength(0)
        MessageBox.Show(a.ToString)
        pdf.Read(myblob, 0, pdf.Length)
        If myConnectionString = "" Then
            myConnectionString = ";Database=Test;Data Source=localhost;User Id=root;Password=12345678"
        End If
        Dim myConnection As New MySqlConnection(myConnectionString)
        Dim myInsertQuery As String = "INSERT INTO letters(data) VALUES (@mypdf)"
        Dim myCommand As New MySqlCommand(myInsertQuery)

        myCommand.Parameters.Add("@mypdf", myblob)
        myCommand.Connection = myConnection
        myConnection.Open()
        Try
            myCommand.ExecuteNonQuery()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            myCommand.Connection.Close()
        End Try
    End Sub
    Sub getBytesCount(ByVal id As String)

    End Sub
    Sub readblob(ByVal myConnectionString As String)
        'connection string to mySQL server and Database test'
        If myConnectionString = "" Then
            myConnectionString = ";Database=Test;Data Source=localhost;User Id=root;Password=12345678"
        End If
        'mySQL Connection
        Dim cn As New MySqlConnection(myConnectionString)
        ' файл
        Dim fs As FileStream
        Dim bw As BinaryWriter
        Dim buffersize As Integer = 100
        Dim outbyte(buffersize - 1) As Byte
        Dim retval As Long
        Dim startindex As Long = 0
        cn.Open()
        Dim logoCMD As MySqlCommand = New MySqlCommand("SELECT data FROM letters WHERE ID=" + NumericUpDown1.Text, cn)
        Dim myReader As MySqlDataReader = logoCMD.ExecuteReader(CommandBehavior.SequentialAccess)
        Dim bytesCount As Long = GetBlobSize(NumericUpDown1.Text)
        Dim counter As Integer = 0
        Dim flgEnd As Boolean

        Do While myReader.Read

            'MsgBox(myReader.FieldCount)
            
            fs = New FileStream("c:\tes.pdf", FileMode.OpenOrCreate, FileAccess.Write)
            bw = New BinaryWriter(fs)
            'Do While bytesCount > 100
            Do While flgEnd = False
                If bytesCount < 100 Then
                    buffersize = bytesCount
                    ReDim outbyte(buffersize - 1)
                    flgEnd = True
                End If
                retval = myReader.GetBytes(0, startindex, outbyte, 0, buffersize)
                bw.Write(outbyte)
                bw.Flush()
                startindex += buffersize
                bytesCount -= buffersize
                counter += 1
            Loop
           
        Loop

        MsgBox(bytesCount & " " & counter.ToString)
        'bw.Write(outbyte, 0, retval - 1)
        'bw.Flush()
        bw.Close()
        fs.Close()
        myReader.Close()
        cn.Close()
    End Sub
    Function GetBlobSize(ByVal blobid As String) As Long
        Dim myConnectionString As String = ";Database=Test;Data Source=localhost;User Id=root;Password=12345678"
        Dim cn As New MySqlConnection(myConnectionString)
        Dim c() As Byte
        Dim bytesCount As Long
        Dim logoCMD As MySqlCommand = New MySqlCommand("SELECT data FROM letters WHERE ID=" + blobid, cn)
        cn.Open()
        Dim myReader As MySqlDataReader = logoCMD.ExecuteReader(CommandBehavior.SequentialAccess)
        Do While myReader.Read
            bytesCount = myReader.GetBytes(0, 0, c, 0, 0)
        Loop
        cn.Close()

        MsgBox(bytesCount)
        GetBlobSize = bytesCount
    End Function
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        InsertRow("";)

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        insparam("";)

    End Sub
    Sub showdb(ByVal myConnectionString As String)

        If myConnectionString = "" Then
            myConnectionString = ";Database=Test;Data Source=localhost;User Id=root;Password=12345678"
        End If
        Dim ds As DataSet = New DataSet("pdf";)
        Dim myConnection As New MySqlConnection(myConnectionString)
        Dim mySelectQuery As String = "SELECT * FROM temp"
        ' myConnection.Open()
        Dim da As MySqlDataAdapter
        da = New MySqlDataAdapter("SELECT * FROM temp", myConnection)

        ' myConnection.Open()
        myConnection.Open()
        Try
            da.Fill(ds)

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            myConnection.Close()
        End Try
        ' myConnection.Close()
        ;DataGrid1.DataSource = ds

    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        showdb("";)
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        writeblob("";)
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        readblob("";)
    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        GetBlobSize(NumericUpDown1.Text)
    End Sub

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        Dim myConnectionString As String = ";Database=Test;Data Source=localhost;User Id=root;Password=12345678"
        Dim cn As New MySqlConnection(myConnectionString)
        cn.Open()
        Dim comm As MySqlCommand = cn.CreateCommand()
        comm.CommandText = "SELECT data FROM letters WHERE ID=" + NumericUpDown1.Text
        Dim reader As MySqlDataReader = comm.ExecuteReader()
        reader.Read()
        Dim test As Object = reader(0)
        Dim fs As FileStream
        Dim bw As BinaryWriter
        fs = New FileStream("c:\t.rar", FileMode.OpenOrCreate, FileAccess.Write)
        bw = New BinaryWriter(fs)
        bw.Write(test)
        bw.Flush()
        bw.Close()
        fs.Close()

        MessageBox.Show("";)
    End Sub

    Private Sub OdbcConnection1_InfoMessage(ByVal sender As System.Object, ByVal e As System.Data.Odbc.OdbcInfoMessageEventArgs)

    End Sub
End Class

Ответить

Номер ответа: 5
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #5 Добавлено: 02.12.05 00:56
2 GSerg

Да они все правильные,
только для разных случаев
1. для ODBC 2.50 Local database
2. для ODBC 2.50 Remote database
3. для ODBC 3.51 Local database
4. для ODBC 3.51 Remote database
5. для OLE DB

Драйвер я думал что установил.
Я скачал вышеуказанный MySQLDriverCS с
сайта MySQL но похоже это не то.
/Столько разновидностей вот и WAX ещё прислал свой вариант/

Не подскажете где взять указанный Вами ODBC
Driver ? ТАм же на MySQL ?



2 WAX

Лихо!

У меня Фрейм1.1 и Студия 2003
подойдут к ним эти дльльки ?
/В прочем сам проверю. Спасибо за помощь/

Ответить

Номер ответа: 6
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #6 Добавлено: 02.12.05 09:08
Не подскажете где взять указанный Вами ODBC Driver ?

http://www.mysql.ru/cgi-bin/download/MySqlODBC.zip

Ответить

Номер ответа: 7
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #7 Добавлено: 04.12.05 21:33
Благодарю.
Поставил я его.
Он чего то пошуршал у меня в Виндус/систем32 и записал туда MYODBC.длльку
Ну Ї ?
ПРостранства имён у меня не прибавилось.
Подключить ету длльку не удаётся /говорит не компонент ето ни .нет ни КОМ/
А через ODBCconnection тоже не работает.

Вопрос - а чего он делает то ?
Его втягивать в студию надо ?
Он имена открывает ?
Или через имена ОДБС с ним работать ?

Я когда выше упомянутый MySQLDriverCS подключил,
он мне после подключения длльки новое пространство имён открыл MySQLConnection итд.
А етот нини.

И ещё вопрос.
А можно ли просто провайдер добавить ? и как ето делается

Спасибо

Ответить

Номер ответа: 8
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #8 Добавлено: 04.12.05 21:40
CS я так понимю это Си ШАрп. Так что работать он не будет./Хотя и коннектица/
Вот провайдера нашёл, правда на АДО.
Не знаю, можно ли будет вручную использовтаь

http://crlab.com/download.html

Ответить

Номер ответа: 9
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #9 Добавлено: 04.12.05 21:44
WAX

а где ты взял

ByteFX.Data.dll
ByteFX.MySqlClient.dll

я чёто два дня на

http://www.bytefx.com

попасть не могу

Ответить

Номер ответа: 10
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #10 Добавлено: 04.12.05 21:59
2 WAX вот нашёл.
Объясни пож ста это одно и тоже тоько разных версий ?

ByteFX.Data.dll - ранняя

ByteFX.MySqlClient.dll - поздняя ?

http://sourceforge.net/project/showfiles.php?group_id=47556&package_id=40533

Ответить

Номер ответа: 11
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #11 Добавлено: 04.12.05 22:14
ИМХО ByteFX для меня несколько понятнее в учтановке.

Теперь ругается что не види хоста локалхост.
Блин наверно Скул Криво встал

Ответить

Номер ответа: 12
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #12
Добавлено: 04.12.05 22:15
Не надо никакого гимора с ODBC
Какая у тебя версия mysql?
В последних версиях драйвер для точкаНЕТ поставляется вместе с mySQl и называется MySQL Connector/Net но можешь скачать его вот отсюда например
http://www.mysql.com/products/connector/net/
Посто подключаешь к проекту библиотеки в references и пространства имен добавляются все прекрасно и удобно работает уже больше года!
Но postgreSQL все равно круче ИМХО :)

Ответить

Номер ответа: 13
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #13
Добавлено: 05.12.05 21:46
ИМХО ByteFX для меня несколько понятнее в учтановке.

:)
XCopy redistribution рулит
хе хе

а из query browser конектится к локалхосту?

Ответить

Номер ответа: 14
Автор ответа:
 юрий



Вопросов: 1
Ответов: 1
 Профиль | | #14 Добавлено: 22.01.06 00:56
Кто обновлял Apache под Framework1.1?
Mожет будет работать с VB.Net без IIS?
saltivlizeiui@rambler.ru

Ответить

Номер ответа: 15
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #15 Добавлено: 22.01.06 22:10
наверно будет если настроить с можешь
Это же по сути два варианта одного и того же

ПХП работает и там и там ВБ.нет не пробовал
Вообще делай отдельный топик

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам