
 نوشته شده توسط 
پرستو پارسایی
					 
				 
				در حال حاضر من کانکشن و دستورات اسکیو ال را برای فراخوانی عکس از دیتابیس ، از این کلاس  استفاده میکنم
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