نوشته شده توسط
پرستو پارسایی
در حال حاضر من کانکشن و دستورات اسکیو ال را برای فراخوانی عکس از دیتابیس ، از این کلاس استفاده میکنم
Imports System.Data.SqlClient
Public Class DataAccess
Private ConStr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DB_ِDesign.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Private SqlCon As New SqlConnection
Public SqlCmd As New SqlCommand
Public SqlDR As SqlDataReader
Public Sub ConOpen()
Try
SqlCon.ConnectionString = ConStr
SqlCon.Open()
Catch ex As Exception
'خطا در اتصال به بانک اطلاعاتی
End Try
End Sub
Public Sub ConClose()
SqlCon.Close()
End Sub
Public Function ExecNonQuery(ByVal Query As String) As Integer
SqlCmd.Connection = SqlCon
SqlCmd.CommandText = Query
ExecNonQuery = SqlCmd.ExecuteNonQuery
End Function
Public Sub ExecReader(ByVal Query As String)
SqlCmd.Connection = SqlCon
SqlCmd.CommandText = Query
SqlDR = SqlCmd.ExecuteReader
End Sub
و برای فراخوانی عکس از دیتا بیس به این شکل :
Dim DB As New DataAccess
Dim Table As New DataTable
DB.ConOpen()
DB.SqlCmd.Parameters.AddWithValue("@Code", Code)
DB.ExecReader("SELECT Master FROM Pic WHERE Code = @Code")
Table.Load(DB.SqlDR)
If Table.Rows.Count > 0 Then
Dim BytBlobData() As Byte = Table.Rows(0).Item(0)
Dim BlobData As New MemoryStream(BytBlobData)
PicCtrl.Image = Image.FromStream(BlobData)
DB.ConClose()
و بدون مشکل کار میکنه. الان میخوام کانکشن استرینگ موجود در کلاس رو از یک تکست باکس لود کنم با کد زیر ولی موفق نبودم لطفا راهنمایی بفرمایید
Private ConStr As String = frmMain.،Textbox1.Text
Private ConStr As String در زمانی مقدار میگیره که شیء از کلاس DataAccess ایجاد میشه، پس یا باید همون موقع که شیء DataAccess رو میسازید به ConStr مقدار TextBox1.Text رو برسونید یا ConStr تون رو Public کنید تا بعدا از بیرون کلاس DataAccess بشه بهش مقدار داد. وگرنه ConStr شما نمیتونه موقع ایجادش از TextBox1.Text ای مقدار بگیره که هنوز frmMain اش ایجاد نشده. frmMain شیء ای است که DataAccess موقع ایجاد بهش دسترسی نداره.
در روش اول ما یک متد سازنده برای DataAccess تعریف می کنیم که بتونه به ConStr مقدار برسونه (با Sub New)
Public Class DataAccess
Private ConStr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DB_ِDesign.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Private SqlCon As New SqlConnection
Public SqlCmd As New SqlCommand
Public SqlDR As SqlDataReader
Public Sub New(ByVal ConnectionString As String)
ConStr = ConnectionString
End Sub
و موقع ایجاد DataAccess بهش مقدار Textbox1.Text یا هر رشته دیگری را می رسونیم :
Dim DB As New DataAccess(TextBox1.Text)
Dim Table As New DataTable
در روش دوم ما ConStr را Public می کنیم تا بشه از بیرون کلاس بهش مقدار داد :
Public Class DataAccess
Public ConStr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DB_ِDesign.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Private SqlCon As New SqlConnection
Public SqlCmd As New SqlCommand
Public SqlDR As SqlDataReader
و بعد از ایجاد شیء از DataAccess به ConStr مقدار TextBox1.Text یا هر رشته دیگری را می دهیم :
Dim DB As New DataAccess
DB.ConStr = TextBox1.Text
Dim Table As New DataTable