PDA

View Full Version : passing text box value to SqlConnection



پرستو پارسایی
پنج شنبه 13 شهریور 1399, 21:10 عصر
سلام من کانکشن استرینگ رو در یک تکست باکس نوشتم و SqlConnection رو در فرم لود از تکست باکس فراخوانی میکنم ولی موفق نبودم ممنون میشم دوستان بفرمایید را صحیح اینکار چیه سپاسگزارم.

"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DB_ِDesign.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"


Dim con As New SqlConnection(TextBox1.Text.ToString)
Dim cmd As New SqlCommand
Dim da As New SqlDataAdapter
Dim ds As New DataSet
con.Open()

محمد آشتیانی
جمعه 14 شهریور 1399, 02:15 صبح
سلام
چه خطایی رخ میده؟ اگر تکست باکس شما از قبل مقدار داشته باشه ، منطقا نباید خطا بده

پرستو پارسایی
جمعه 14 شهریور 1399, 09:21 صبح
سپاسگزارم از شما بله تکست باکس دارای مقدار هست و اگر خود کانکشن استرینگ رو در خط اول درج کنم بدون اشکال کار میکنه در پست اول تکست باکس1 بود در این پست تکست باکس 6 لطفا این تغییر را خطا فرض نکنید متن تکست باکس هم دقیقا کانکشن پست اوله که از تکست باکس کپی کردم

the king
جمعه 14 شهریور 1399, 09:27 صبح
سپاسگزارم از شما تکست باکس دارای مقدار هست
دو طرف connection string تون کاراکتر " داره؟
double quotation های دو طرف رشته رو صرفا در کد می نویسید تا ابتدا و انتهای رشته مشخص بشه، نه در TextBox.Text
در داخل TextBox در دو طرف connection string نباید کاراکتر " باشه. بجای "...=Data Source" باید ...=Data Source باشه.
در ضمن ()Text.ToString نکنید، Text خودش String ئه، تبدیل ()ToString لازم نداره.

پرستو پارسایی
جمعه 14 شهریور 1399, 09:46 صبح
دو طرف connection string تون کاراکتر " داره؟
double quotation های دو طرف رشته رو صرفا در کد می نویسید تا ابتدا و انتهای رشته مشخص بشه، نه در TextBox.Text
در داخل TextBox در دو طرف connection string نباید کاراکتر " باشه. بجای "...=Data Source" باید ...=Data Source باشه.
در ضمن ()Text.ToString نکنید، Text خودش String ئه، تبدیل ()ToString لازم نداره.


سپاسگزارم پاسخ شما هم راه حل بود هم آموزش . مشکلم حل شد سپاس

پرستو پارسایی
شنبه 15 شهریور 1399, 11:15 صبح
در حال حاضر من کانکشن و دستورات اسکیو ال را برای فراخوانی عکس از دیتابیس ، از این کلاس استفاده میکنم

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

the king
شنبه 15 شهریور 1399, 11:34 صبح
در حال حاضر من کانکشن و دستورات اسکیو ال را برای فراخوانی عکس از دیتابیس ، از این کلاس استفاده میکنم

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

پرستو پارسایی
شنبه 15 شهریور 1399, 12:11 عصر
سپاسگزارم از شما من از این مطلب آموزشی شما رو در هر دو روش استفاده کردم و عالی بود ولی من سوالم کمی نقص داشت که تصحیح میکنم . من در ابتدا کانکسن استرینگم رو ذر یک پروژه دیگه اینکریپت کردم و در یک تکست باکس در پروژه فعلی ADD کردم . بعد مقدار تکست باکس رو در فرم لود پروژه فعلیdecode میکنم و به کاکشن استرینگم بر میگردونم . حال میخوام در DataAccess که استفاده میکنم ConStr رو مقدار دهی کنم از تکست باکسم که دارای مقدار کانکسن استرینگ هست. ببخشید اگر طولانی شد

the king
شنبه 15 شهریور 1399, 12:39 عصر
سپاسگزارم از شما من از این مطلب آموزشی شما رو در هر دو روش استفاده کردم و عالی بود ولی من سوالم کمی نقص داشت که تصحیح میکنم . من در ابتدا کانکسن استرینگم رو ذر یک پروژه دیگه اینکریپت کردم و در یک تکست باکس در پروژه فعلی ADD کردم . بعد مقدار تکست باکس رو در فرم لود پروژه فعلیdecode میکنم و به کاکشن استرینگم بر میگردونم . حال میخوام در DataAccess که استفاده میکنم ConStr رو مقدار دهی کنم از تکست باکسم که دارای مقدار کانکسن استرینگ هست. ببخشید اگر طولانی شد
فرقی نمی کنه، مقدار Connection String شما در یک چیزی هست، چه رمزی و چه غیر رمزی، چه TextBox و چه متغیر و چه فایل و ... به هر حال مقدارش در جایی هست، اون مقدار رو یا در DB As New DataAccess قرار بدهید یا بعد از ساخته شدن DB در DB.ConStr قرار بدهید. برای پیدا کردن راه حل هم اول کار فرض کنید که اصلا DataAccess و ConStr ای در کار نیست، یعنی صورت مساله شما الان ConStr نیست، مساله تون خوندن و نمایش مقدار Connection String در اون بخش از کد ئه. تصور کنید که فقط می خواهید اون مقدار Connection String رو در اون بخش از کد با MsgBox یا MessageBox.Show نمایش بدهید، نه بیشتر. وقتی اینکار رو انجام دادید و موفق شدید، اونوقت به سادگی بجای اینکه نمایش اش بدهید می توانید ConStr رو پر کنید.

پرستو پارسایی
شنبه 15 شهریور 1399, 14:38 عصر
فرقی نمی کنه، مقدار Connection String شما در یک چیزی هست، چه رمزی و چه غیر رمزی، چه TextBox و چه متغیر و چه فایل و ... به هر حال مقدارش در جایی هست، اون مقدار رو یا در DB As New DataAccess قرار بدهید یا بعد از ساخته شدن DB در DB.ConStr قرار بدهید. برای پیدا کردن راه حل هم اول کار فرض کنید که اصلا DataAccess و ConStr ای در کار نیست، یعنی صورت مساله شما الان ConStr نیست، مساله تون خوندن و نمایش مقدار Connection String در اون بخش از کد ئه. تصور کنید که فقط می خواهید اون مقدار Connection String رو در اون بخش از کد با MsgBox یا MessageBox.Show نمایش بدهید، نه بیشتر. وقتی اینکار رو انجام دادید و موفق شدید، اونوقت به سادگی بجای اینکه نمایش اش بدهید می توانید ConStr رو پر کنید.


سپاسگزارم به جواب مورد نیازم با راهنمایی های شما رسیدم (پاسخ هم آموزش بود هم راهنمایی) مجددا تشکر میکنم