PDA

View Full Version : سوال: عدم شناسایی connection string ایجاد شده در یک کلاس مجزا جهت ارتباط



sahel65
پنج شنبه 19 خرداد 1390, 10:13 صبح
سلام دوستان؛
من برای ارتباط با 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)
{

}
}
}

Directx
پنج شنبه 19 خرداد 1390, 11:21 صبح
دوست عزیز شما cnn رو داخل یه تابع تعریف کردین یعنی یه متغیره لوکاله و بیرون از تابع دیگه قابل دسترسی نیست و تابع که تموم می شه منابع تخصیص داده شده بهش توسط garbage collection ازاد می شه اگه می خوایید تو کل کلاس استفاده کنید اونو بیرون از تابع تعریف کنید.

mehran_minayi
پنج شنبه 19 خرداد 1390, 17:18 عصر
direct X کاملا درست میگه
منم یک پیشنهاد داشتم
کلا برای کارای DB یک کلاس بساز و از اون استفاده کن

farsoft
پنج شنبه 19 خرداد 1390, 18:05 عصر
این شکلی تعریف کن


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;

}

ali.asady
جمعه 20 خرداد 1390, 23:09 عصر
چرا اون رو داخل Settings برنامه ات ذخیره نمی کنی بصورت یک فایل ایکس ام ال
که هرجا خواستی اون را تغییر بدی اگه خواستی راهش رو برات می نویسم

sahel65
شنبه 21 خرداد 1390, 07:58 صبح
دوست عزیز شما cnn رو داخل یه تابع تعریف کردین یعنی یه متغیره لوکاله و بیرون از تابع دیگه قابل دسترسی نیست و تابع که تموم می شه منابع تخصیص داده شده بهش توسط garbage collection ازاد می شه اگه می خوایید تو کل کلاس استفاده کنید اونو بیرون از تابع تعریف کنید.
اولا از شما مجددا تشکر می کنم؛
خب ببین دوست عزیز من طبق این شکل اومدم و تعریف کردم؛ ولی جواب نداد! آیا منظورتون همینجوریه؟

70989


ضمنا وقتی که تابع رو Public تعریفش کردم باید بتونم از جاهای دیگه توی همون کلاس بهش دسترسی پیدا کنم! اینجوری نیست مگه؟ دارم اشتباه می کنم؟؟
ضمنا چرا روش دوستمون farsoft داره جواب میده؟؟
منم تقریبا مشابه ایشون کار کردم.

منم یک پیشنهاد داشتم
کلا برای کارای DB یک کلاس بساز و از اون استفاده کن
آره منم با نظر شما کاملا موافقم ، فقط یه سوال داشتم، برای اینکه کد استاندارد باشه چه مواردی رو باید توی این کلاس بذارم؟؟ ممنون میشم اگه یه نمونه کد یا یه توضیح کوچیکی تو این زمینه بدید.

چرا اون رو داخل Settings برنامه ات ذخیره نمی کنی بصورت یک فایل ایکس ام ال
که هرجا خواستی اون را تغییر بدی اگه خواستی راهش رو برات می نویسم
معلومه که خوبه عزیزم. نیکی و پرسش؟
لطفا راهش رو برام بذار.
ممنونم از همه دوستان.

gwbasic
شنبه 21 خرداد 1390, 11:05 صبح
پیشنهاد می کنم قبل از هر کاری بپردازید به مفاهیم Object oriented و حتما حتما این مفاهیمو خوب یاد بگیرید وگرنه همه جا گیر می کنید. می تونید به آموزشی که من درهمین سایت گذاشتم مراجعه کنید.
در کد شما مشکلی که وجود دارد اینه که فرق فیلد در یک کلاس و متغیر محلی در یک متد رو متوجه نشدید در ضمن هیچ وقت یک کلاس بالای کلاس فرم تعریف نکنید چون Designer نمی تونه فرم رو Load کنه

gwbasic
شنبه 21 خرداد 1390, 11:17 صبح
در ضمن Setting به نظر نمی رسه که جای خوبی برای ذخیره Connection string باشه چون Setting بیشتر برای ذخیره state فرم و یا مقادیری که می خواهیم هنگام خروج برنامه ذخیره کنیم تا در اجرای دوباره این مقدار را داشته باشیم ، استفاده می شود.
در عوض می شه از App.Config استفاده کرد چرا که امکان Encrypt رو هم می ده. اگه از ویزارد Visual Studio برای ارتباط با DataBase استفاده کنید می تونید ببنینید که Connection String چطوری در App.Config ذخیره می شه

hashemi85sep
شنبه 21 خرداد 1390, 11:41 صبح
چرا اون رو داخل Settings برنامه ات ذخیره نمی کنی بصورت یک فایل ایکس ام ال
که هرجا خواستی اون را تغییر بدی اگه خواستی راهش رو برات می نویسم

سلام دوست عزیز
میشه لطفا توضیح بدین؟

sahel65
شنبه 21 خرداد 1390, 11:43 صبح
در ضمن Setting به نظر نمی رسه که جای خوبی برای ذخیره Connection string باشه چون Setting بیشتر برای ذخیره state فرم و یا مقادیری که می خواهیم هنگام خروج برنامه ذخیره کنیم تا در اجرای دوباره این مقدار را داشته باشیم ، استفاده می شود.
ببخشید منظورتون از setting همون string هستش؟
اگه منظورتون همینه پس چرا اکثرا از همین روال استفاده می کنن؟
یعنی درست نیست اینجوری؟
ازتون متشکرم

gwbasic
شنبه 21 خرداد 1390, 12:22 عصر
منظور از Setting یکی از آیتمهایی که به پروژه می توان اضافه کرد Setting File هست

sahel65
شنبه 21 خرداد 1390, 12:25 عصر
ولی من از setting استفاده نکردم که!

tooraj_azizi_1035
شنبه 21 خرداد 1390, 12:32 عصر
سلام
اول اینکه شما کلاسی تعریف نکرده اید بلکه یک متد ایجاد کرده اید. کلاس مادر Form1 است شما باید متغیر های cnn ، cmd را در قلمرو کلاس Form1 تعریف کنید تا توسط تمام متدهای درون کلاس Form1 قابل دستیابی باشد. سپس در متد Connect تمام آنچه که برای اتصال نیاز است را بنویسید.

exlord
شنبه 21 خرداد 1390, 16:10 عصر
این یه کلاس کامل برای کار با دیتا بیس 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 ها ...