Страница: 1 |
Страница: 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=16834atabase=mydatabase;"
"river={mySQL};Server=data.domain.com;Port=3306; Option=131072;Stmt=atabase=my-database;Uid=username;Pwd=password;"
"RIVER={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=MySQLProvata 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-сайт:
Профиль | | #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 = "ataGrid1"
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 = "ataSource = " + DataSource + "atabase=" + 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 = "atabase=Testata 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 = "atabase=Testata Source=localhost;User Id=root;Password=12345678"
End If
Dim myConnection As New MySqlConnection(myConnectionString)
Dim myInsertQuery As String = "ELETE 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 = "atabase=Testata 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 = "atabase=Testata 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 = "atabase=Testata 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 = "atabase=Testata 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()
 ataGrid1.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 = "atabase=Testata 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
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-сайт:
Профиль | | #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-сайт:
Профиль | | #13
Добавлено: 05.12.05 21:46
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
наверно будет если настроить с можешь
Это же по сути два варианта одного и того же
ПХП работает и там и там ВБ.нет не пробовал
Вообще делай отдельный топик