عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
سلام دوستان؛
من برای ارتباط با sql اومدم و یه کلاس درست کردم.
حالا در متن برنامه وقتی که اون کلاس رو فراخوانیش می کنم ، قادر به دستیابی به connection string من نیست.
میشه کمک کنید.
خط مورد نظر رو که نمیشنامه براتون مشخص کردم.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.Sql;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public void Connect()
{
SqlConnection cnn = new SqlConnection();
cnn.ConnectionString = (@"Data Source=sh\STAR;Initial Catalog=test;Integrated Security=True");
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Connect();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from person";
this line:==> cmd.Connection = cnn;
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
دوست عزیز شما cnn رو داخل یه تابع تعریف کردین یعنی یه متغیره لوکاله و بیرون از تابع دیگه قابل دسترسی نیست و تابع که تموم می شه منابع تخصیص داده شده بهش توسط garbage collection ازاد می شه اگه می خوایید تو کل کلاس استفاده کنید اونو بیرون از تابع تعریف کنید.
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
direct X کاملا درست میگه
منم یک پیشنهاد داشتم
کلا برای کارای DB یک کلاس بساز و از اون استفاده کن
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
این شکلی تعریف کن
public partial class Form1 : Form
{
SqlConnection cnn = new SqlConnection();
public void Connect()
{
cnn.ConnectionString = (@"Data Source=sh\STAR;Initial Catalog=test;Integrated Security=True");
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Connect();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from person";
cmd.Connection = cnn;
}
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
چرا اون رو داخل Settings برنامه ات ذخیره نمی کنی بصورت یک فایل ایکس ام ال
که هرجا خواستی اون را تغییر بدی اگه خواستی راهش رو برات می نویسم
1 ضمیمه
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
نقل قول:
دوست عزیز شما cnn رو داخل یه تابع تعریف کردین یعنی یه متغیره لوکاله و بیرون از تابع دیگه قابل دسترسی نیست و تابع که تموم می شه منابع تخصیص داده شده بهش توسط garbage collection ازاد می شه اگه می خوایید تو کل کلاس استفاده کنید اونو بیرون از تابع تعریف کنید.
اولا از شما مجددا تشکر می کنم؛
خب ببین دوست عزیز من طبق این شکل اومدم و تعریف کردم؛ ولی جواب نداد! آیا منظورتون همینجوریه؟
ضمنا وقتی که تابع رو Public تعریفش کردم باید بتونم از جاهای دیگه توی همون کلاس بهش دسترسی پیدا کنم! اینجوری نیست مگه؟ دارم اشتباه می کنم؟؟
ضمنا چرا روش دوستمون farsoft داره جواب میده؟؟
منم تقریبا مشابه ایشون کار کردم.
نقل قول:
منم یک پیشنهاد داشتم
کلا برای کارای DB یک کلاس بساز و از اون استفاده کن
آره منم با نظر شما کاملا موافقم ، فقط یه سوال داشتم، برای اینکه کد استاندارد باشه چه مواردی رو باید توی این کلاس بذارم؟؟ ممنون میشم اگه یه نمونه کد یا یه توضیح کوچیکی تو این زمینه بدید.
نقل قول:
چرا اون رو داخل Settings برنامه ات ذخیره نمی کنی بصورت یک فایل ایکس ام ال
که هرجا خواستی اون را تغییر بدی اگه خواستی راهش رو برات می نویسم
معلومه که خوبه عزیزم. نیکی و پرسش؟
لطفا راهش رو برام بذار.
ممنونم از همه دوستان.
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
پیشنهاد می کنم قبل از هر کاری بپردازید به مفاهیم Object oriented و حتما حتما این مفاهیمو خوب یاد بگیرید وگرنه همه جا گیر می کنید. می تونید به آموزشی که من درهمین سایت گذاشتم مراجعه کنید.
در کد شما مشکلی که وجود دارد اینه که فرق فیلد در یک کلاس و متغیر محلی در یک متد رو متوجه نشدید در ضمن هیچ وقت یک کلاس بالای کلاس فرم تعریف نکنید چون Designer نمی تونه فرم رو Load کنه
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
در ضمن Setting به نظر نمی رسه که جای خوبی برای ذخیره Connection string باشه چون Setting بیشتر برای ذخیره state فرم و یا مقادیری که می خواهیم هنگام خروج برنامه ذخیره کنیم تا در اجرای دوباره این مقدار را داشته باشیم ، استفاده می شود.
در عوض می شه از App.Config استفاده کرد چرا که امکان Encrypt رو هم می ده. اگه از ویزارد Visual Studio برای ارتباط با DataBase استفاده کنید می تونید ببنینید که Connection String چطوری در App.Config ذخیره می شه
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
نقل قول:
نوشته شده توسط
ali.asady
چرا اون رو داخل Settings برنامه ات ذخیره نمی کنی بصورت یک فایل ایکس ام ال
که هرجا خواستی اون را تغییر بدی اگه خواستی راهش رو برات می نویسم
سلام دوست عزیز
میشه لطفا توضیح بدین؟
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
نقل قول:
در ضمن Setting به نظر نمی رسه که جای خوبی برای ذخیره Connection string باشه چون Setting بیشتر برای ذخیره state فرم و یا مقادیری که می خواهیم هنگام خروج برنامه ذخیره کنیم تا در اجرای دوباره این مقدار را داشته باشیم ، استفاده می شود.
ببخشید منظورتون از setting همون string هستش؟
اگه منظورتون همینه پس چرا اکثرا از همین روال استفاده می کنن؟
یعنی درست نیست اینجوری؟
ازتون متشکرم
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
منظور از Setting یکی از آیتمهایی که به پروژه می توان اضافه کرد Setting File هست
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
ولی من از setting استفاده نکردم که!
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
سلام
اول اینکه شما کلاسی تعریف نکرده اید بلکه یک متد ایجاد کرده اید. کلاس مادر Form1 است شما باید متغیر های cnn ، cmd را در قلمرو کلاس Form1 تعریف کنید تا توسط تمام متدهای درون کلاس Form1 قابل دستیابی باشد. سپس در متد Connect تمام آنچه که برای اتصال نیاز است را بنویسید.
1 ضمیمه
نقل قول: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط
این یه کلاس کامل برای کار با دیتا بیس Access ...تبدیلش به SQL هم با خودت ...
نحوه استفاده ش هم به این شکله :
namespace Exlord.VC.DB.Model
{
public class BaseDAL : BaseAcc
{
public BaseDAL()
{
OleDbConnectionStringBuilder oc = new OleDbConnectionStringBuilder();
oc.Provider = "Microsoft.ACE.OLEDB.12.0";
oc.DataSource = Application.StartupPath + "\\DB\\VCDB.accdb";
oc.PersistSecurityInfo = true;
oc.Add("Jet OLEDB:Database Password", "*********");
this.ConnectionString = oc.ConnectionString;
}
}
}
حالا میتونی از این کلاس BaseDAL یا نمونه سازی کنی یا تو یه کلای DAL دیگه ازش ارث بری کنی برای انجام query ها ...