PDA

View Full Version : ارسال یک رشته"192.168.23.67" به یک کلاس!!



Hunter_Of_Kiss
یک شنبه 20 فروردین 1391, 20:34 عصر
سلام دوستان!
موضوع: چطور میشه یک رشته را به یک کلاس ارسال کرد.
مثلاً من یک کلاس دارم که توش Connection String هست که ادرس یک سرور توش هست که می خوام وقتی آی پی سرور تغییر کرد کاربر بتونه آی پی جدید رو وارد کنه و به سرور وصل شه!
روش کار:
تو فرم اول که لود میشه از یک فایل تکست مقدار آی پی ثبت شده فراخوانی میشه و توسط یک متغیر استرینج پابلیک به کلاس مورد نظر ارسال میشه. حالا من تو کلاس یه متغیر استرینج پابلیک تعریف کردم که آی پی فرم اول به اون پاس بشه و اون هم تو کانکشن استرینج اعمال کنه منتها مشکل کار اینجاست که ارور میده و من نمیتونم اینکارو درست انجام بدم.
کسی میتونه منو برای حل این مشکل راهنمایی کنه؟

esiprogrammer
یک شنبه 20 فروردین 1391, 22:19 عصر
اگه میشه تصویر ارور یا نمونه کدتون رو ارسال کنید تا بهتر مشخص بشه

Hunter_Of_Kiss
دوشنبه 21 فروردین 1391, 10:08 صبح
سلام دوست عزیز:
جایی که آی پی باید قرار گیره اینجاست

public string ConnecttoSQL = @"Data Source ="+IPAddressClassConnect+",1433;Network

ارور هم همینه:
Error 1 A field initializer cannot reference the non-static field, method, or property 'Projectname.ConnecttoProjectname.IPAddressClassCo nnect'

خیلی ممنون می شیم اگه راهنمایی کنید
من فکر می کنم مشکی که این روش داره مربوط به نوع متغیر هست که باید به جای public از static استفاده بشه منتها من بلد نیستم که این دوتا رو با هم تلفیق بدم چون واسه کانکشن استیرنج از همه کدهای برنامه بهم لینک می باشند.

hakim22
دوشنبه 21 فروردین 1391, 11:22 صبح
شما باید از یک constructor استفاده کنید .
مثل :

public CEmployees userLogin = new CEmployees(connString);

Hunter_Of_Kiss
دوشنبه 21 فروردین 1391, 14:08 عصر
سلام دوست عزیز لطف می کنی دقیقاً بگی باید چیکار کنم
کدی که کن توکلاس کانکت نوشتم اینه:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Provide_Assistance
{

class ConnecttoProviceAssistance
{
public string IPAddressClassConnect;

public string ConnecttoSQL = @"Data Source =”+ IPAddressClassConnect+”,1433;Network Library=DBMSSOCN; Initial Catalog =SQLDATABASE.mdf;User Id =PASystem;Password =1";
}
}

takgig
سه شنبه 22 فروردین 1391, 19:41 عصر
سلام
اسم فرم صفحه اول من که آی پی رو از تکست باکس می گیرم و توی یک متغیر IP از نوع public و string ذخیره می کنم LoginPage است و از کد زیر برای کارم استفاده می کنم در فرمهای دیگه :
این تعریف متغیر :
public static string IP = "";

اینم کانکشن استرینگ :
cn.ConnectionString = "Data Source=" + LoginPage.IP + ",1433;Network Library=DBMSSOCN;Initial Catalog=DBSite;User ID=1;Password=1";

cpppro
سه شنبه 22 فروردین 1391, 21:19 عصر
سلام
دو راه ساده داره.یکی که دوستان گفتن از متغییر سراسری استاتیک استفاده کنین.یکی هم از پراپرتیها میتونین استفاده کنین.

Hunter_Of_Kiss
چهارشنبه 23 فروردین 1391, 08:48 صبح
سلام دوست عزیز با تشکر از همراهی شما
اسم فرم صفحه اول من که آی پی رو از تکست باکس می گیرم و توی یک متغیر IP از نوع public و string ذخیره می کنم LoginPage است و از کد زیر برای کارم استفاده می کنم در فرمهای دیگه :
این تعریف متغیر :
public static string IP = "";

اینم کانکشن استرینگ :
cn.ConnectionString = "Data Source=" + LoginPage.IP + ",1433;Network Library=DBMSSOCN;Initial Catalog=DBSite;User ID=1;Password=1";

سلام
منظور شما اینه که من تو فرم اصلی یه متغیر public static string IP = ""; تعریف کنم و تو کلاسی که کانکشن استرینج داخلش هست فقط کانکشن استرینجی که گذاشتینو بذارم و تمام!!!؟؟
اگه منظورتون همین بود که ارور داد.
در ضمن من با این کانکشن هم تست کردم در این حالت هیچ اروری نمیده منتها درست عمل نمیکنه و به سرور وصل نمیشه.
public string ConnecttoSQL = "Data Source=" + FrLogin.IPAddress1 + ",1433;Network Library=DBMSSOCN;Initial Catalog=SQLDATABASE.mdf; User ID=1;Password=1";

بازم ممنون از لطف شما.

Hunter_Of_Kiss
چهارشنبه 23 فروردین 1391, 09:58 صبح
سلام
دو راه ساده داره.یکی که دوستان گفتن از متغییر سراسری استاتیک استفاده کنین.یکی هم از پراپرتیها میتونین استفاده کنین.

دوست عزیز لطف می کنی راه دوم را توضیح بدی!!

cpppro
چهارشنبه 23 فروردین 1391, 10:59 صبح
سلام
یه نمونه براتون گذاشتم.
بهتر کانکشن رو توی یه تابع اجرا کنین تا قابل کنترل باشه.

http://131.0.img98.net/out.php/i288112_send-var.rar

Hunter_Of_Kiss
چهارشنبه 23 فروردین 1391, 15:41 عصر
سلام
یه نمونه براتون گذاشتم.
بهتر کانکشن رو توی یه تابع اجرا کنین تا قابل کنترل باشه.

http://131.0.img98.net/out.php/i288112_send-var.rar

سلام دوست گلم./
از بابت همکاریت فوق العاده متشکرم.
فقط اینجا یه مشکلی که من دارم اینکه چون توهمه این فرم ها دسترسی به کانکشن بصورت پابلیک نوشته شده و در کد شما دسترسی به کانکشن به این صورت ممکن نیست حالا شما راهی دارین که در نهایت کانکشن استرینج بصورت پابلیک در دسترس باشه؟

دسترسی ها به این صورت بوده

SqlConnection ObjectConnection = new SqlConnection(Connect.ConnecttoSQL);
یعنی در نهایت بعد از اعمال آی پی باید به این صورت دسترسی داشت به کانکشن Connect.ConnecttoSQL .

از توجه شما سپاسگذارم.

cpppro
چهارشنبه 23 فروردین 1391, 16:47 عصر
شما یه کار دیگه هم میتونین بکنین.اونم اینکه یه کلاس جدید تعریف کنین و ازش به عنوان نگهدارنده ی متغییر های استاتیک و عمومی استفاده کنین.
تو این حالت میتونین کانکشن رو تو بالای هر فرم یا کلاس داشته باشین و لازم به چیزای دیگه نیست.تنها موقع اختصاص مقدار به همون متغییر تنها کافیه نام کلاس و متغییر رو بیارین.
Class.var1=textbox1.tex;
همین مقداری رو که ذخیره میشه دوباره تو همون کانکشن فراخوانی کنین.یعنی
public string ConnecttoSQL = @"Data Source ="+ Class.var1 +",1433;Network
با اجرای هر فرم جدید این مقدار دهی انجام میشه.
پس اول یه کلاس درست کنین و این متغییر مثلا var1 رو به صورت استاتیک توش تعریف کنین.

Hunter_Of_Kiss
چهارشنبه 23 فروردین 1391, 17:03 عصر
شما یه کار دیگه هم میتونین بکنین.اونم اینکه یه کلاس جدید تعریف کنین و ازش به عنوان نگهدارنده ی متغییر های استاتیک و عمومی استفاده کنین.
تو این حالت میتونین کانکشن رو تو بالای هر فرم یا کلاس داشته باشین و لازم به چیزای دیگه نیست.تنها موقع اختصاص مقدار به همون متغییر تنها کافیه نام کلاس و متغییر رو بیارین.
Class.var1=textbox1.tex;
همین مقداری رو که ذخیره میشه دوباره تو همون کانکشن فراخوانی کنین.یعنی
public string ConnecttoSQL = @"Data Source ="+ Class.var1 +",1433;Network
با اجرای هر فرم جدید این مقدار دهی انجام میشه.
پس اول یه کلاس درست کنین و این متغییر مثلا var1 رو به صورت استاتیک توش تعریف کنین.
دوست عزیز اگه لطف کنی و داخل همون سورس خودت اونارو لحاظ کنی خیلی خوب میشه. مرسی.

cpppro
چهارشنبه 23 فروردین 1391, 18:41 عصر
سلام
ارسال 3 مال تغییرات اضافه شده است.
کانکش رو در تمامی فرمها میتونین بزارین.تنها از متغییر استاتیکی که تو یه کلاس دیگه استفاده کردین باید توش استفاده کنین.
البته اون تابعی که اضافه کردم لازم نیست. اصل کار همون متغییر استاتیک سراسری هست.
http://131.0.img98.net/out.php/i289091_send-var.rar

takgig
چهارشنبه 23 فروردین 1391, 19:53 عصر
سلام
منظور شما اینه که من تو فرم اصلی یه متغیر public static string IP = ""; تعریف کنم و تو کلاسی که کانکشن استرینج داخلش هست فقط کانکشن استرینجی که گذاشتینو بذارم و تمام!!!؟؟
اگه منظورتون همین بود که ارور داد.
در ضمن من با این کانکشن هم تست کردم در این حالت هیچ اروری نمیده منتها درست عمل نمیکنه و به سرور وصل نمیشه.
public string ConnecttoSQL = "Data Source=" + FrLogin.IPAddress1 + ",1433;Network Library=DBMSSOCN;Initial Catalog=SQLDATABASE.mdf; User ID=1;Password=1";

بازم ممنون از لطف شما.

سلام
اینم نمونش که کار می کنه.
یوزر و پس ورودی 1 هست و برای وصل شدن به دیتابیس هم باید اونو که تو پوشه است رو اتچ کنی و بعد یوزر و پس 1 رو هم برای ورود به sql فعال کنی.

http://s1.picofile.com/file/7352293438/TestConnectWithIP.rar.html

Hunter_Of_Kiss
پنج شنبه 24 فروردین 1391, 09:39 صبح
سلام
اینم نمونش که کار می کنه.
یوزر و پس ورودی 1 هست و برای وصل شدن به دیتابیس هم باید اونو که تو پوشه است رو اتچ کنی و بعد یوزر و پس 1 رو هم برای ورود به sql فعال کنی.

http://s1.picofile.com/file/7352293438/TestConnectWithIP.rar.html

سلام دوست عزیز از راهنمایی های صمیمانه شما سپاسگذارم.
ظاهراً روش آخری خوب کارمیکنه منتها کد CLASS_S.var1 = textBox1.Text; مقدار استرینج را به درستی به متغیر استاتیک کلاس CLASS_S ارسال نمی کنه یعنی اینطوری بگم ارسال میشه ولی فکر کنم کانکشن نمیتونه ازش استفاده کنه!!
البته من با این دو روش تست کردم که مقدار رو میشه گرفت:
تست ارسال مقدار استرینج ارسالی : بعد از ارسال مقدار متغیر با یک مسیج باکس که مقدار ارسال شده را از کلاس مورد نظر رو میگیره، مقدار درست هست!!!!!
اگر هم مقدار رو دستی در متغیر استاتیک کلاس مورد نظر می نویسم نرم افزار کار می کنه و مشکلی نداره!!!! public static string Var1 = "192.168.24.50";

پس در این صورت مشکل باید در ارسال مقدار به کلاس باشه!! به نظر شما اشکال از کجا میتونه باشه!؟؟
با تشکر.

cpppro
پنج شنبه 24 فروردین 1391, 10:09 صبح
سلام
باید ترتیب ارسال متغییر یا اجرای کانکشن رعایت بشه.ممکنه شما دستور فراخوانی کلاس رو قبل از دستور تخصیص مقدار به متغییر استاتیک داده باشین.که تو این حالت جواب درست نخواهد بود.
بهتر این موارد رو هم بررسی کنین.

Hunter_Of_Kiss
پنج شنبه 24 فروردین 1391, 12:05 عصر
سلام
باید ترتیب ارسال متغییر یا اجرای کانکشن رعایت بشه.ممکنه شما دستور فراخوانی کلاس رو قبل از دستور تخصیص مقدار به متغییر استاتیک داده باشین.که تو این حالت جواب درست نخواهد بود.
بهتر این موارد رو هم بررسی کنین.

سلام
حق با شما بود! ترتیب رو رعایت نکرده بودم.

دوستان عزیز از راهنمایی های شما فوق العاده متشکرم و امیدوارم موفق و سرافراز باشید.

Hunter_Of_Kiss
پنج شنبه 24 فروردین 1391, 13:54 عصر
ببخشید یه سوال دیگه داشتم در خصوص بازکردن کانکشن، بعضی از برنامه نویس ها برای دسترسی به بانک در کدهاشون اول فرم کانکشن را باز می کنند و بعد از پایان همه کدهای فرم کانکشن را می بندند.
ولی من بعد از هر بار نیاز به بانک کانکشن را می بندم که یه جا خوندم که این کار باعث کندی SQL تو سرویس دهی میشه به نظر شما این دیدگاه درسته یا نه یا اصلاً فرقی هم می کند؟؟؟؟
باتشکر.