PDA

View Full Version : سوال: مشکل ست کردن نام database به صورت متغیر



mrzirak
چهارشنبه 04 اردیبهشت 1398, 18:56 عصر
عرض سلام خدمت استادهای عزیز.
دوستان من در سی شارپ کانکشن استرینگ رو ست میکنم ولی هرکاری میکنم که اسم دیتا بیس رو به صورت متغیر بذارم نمیشه و جدول داخل دیتابیس رو نمیاره در صورتی که اگه همون اسم دیتابیس رو به صورت دستی در طول رشته قرار بدم درست کار میکنه.
150083

150084

Asra98
پنج شنبه 05 اردیبهشت 1398, 01:18 صبح
کلا روش کاریتون اشتباهه ، کانکشن استرینگ رو باید در وب کانفیگ ست کنید .
اما اینکه اینجا چرا جواب گو نیست کمی تامل برانگیزه ! چون روش کار درسته استاندارد نیست ولی نباید مشکلی هم داشته باشه ، حالا به جای استفاده از روش $ که استفاده کردید که من برای اولین بار دیدم واتفاقا خیلی هم سینتکس زیبایی داره ، از روش سنتی زیر استفاده کنید :


datastring =""+ serverid+""+dbname

Shadow_net
پنج شنبه 05 اردیبهشت 1398, 15:33 عصر
متدها رو static کنید ببینید مشکلتون حل میشه ؟

farhad_shiri_ex
جمعه 06 اردیبهشت 1398, 13:12 عصر
عرض سلام خدمت استادهای عزیز.
دوستان من در سی شارپ کانکشن استرینگ رو ست میکنم ولی هرکاری میکنم که اسم دیتا بیس رو به صورت متغیر بذارم نمیشه و جدول داخل دیتابیس رو نمیاره در صورتی که اگه همون اسم دیتابیس رو به صورت دستی در طول رشته قرار بدم درست کار میکنه.
150083

150084

وقتی در زمان تعریف متغییر نام دیتابیس که به صورت استاتیک تعریف کردید مقدار دهی اولیه نکردید CLR مقدار خالی در رشته قرار میده! (قوانین تعریف متغییر در حافظه هیپ)
که البته بهتره که حتما یک مقدار پیش فرض برای این متغییرها در سازنده کلاس تعریف ویا در همان قسمت تعریف متغییر ویا دریک بلاک استاتیک مقدار دهی اولیه انجام بدید!
بنابراین در چه زمانی مقدار نام دیتابیس را ست میکنید؟
بهتر هست که property را هم استاتیک تعریف کنید و قبل از فراخوانی رشته کانکشن استرینگ حتما مقدار نام دیتابیس را ست کنید.

mrzirak
جمعه 06 اردیبهشت 1398, 23:12 عصر
وقتی در زمان تعریف متغییر نام دیتابیس که به صورت استاتیک تعریف کردید مقدار دهی اولیه نکردید CLR مقدار خالی در رشته قرار میده! (قوانین تعریف متغییر در حافظه هیپ)
که البته بهتره که حتما یک مقدار پیش فرض برای این متغییرها در سازنده کلاس تعریف ویا در همان قسمت تعریف متغییر ویا دریک بلاک استاتیک مقدار دهی اولیه انجام بدید!
بنابراین در چه زمانی مقدار نام دیتابیس را ست میکنید؟
بهتر هست که property را هم استاتیک تعریف کنید و قبل از فراخوانی رشته کانکشن استرینگ حتما مقدار نام دیتابیس را ست کنید.

ممنون از وقتتون
همین کار ها رو هم کردم و دقیقا با لود شدن فرم متغیر ها مقدار دهی میشن و باید اصولا مشکلی نداشته باشه که در اصل کار نمیکنه.
برای اینکه مطمئن بشم که هربار متغیر ها مقدار دهی میشن از حالت دیباگ و با یک مسیج باکس هم حتی امتحان کردم و متغیر ها به صورت صحیح مقدار دهی میشن ولی بازم به مشکل میخوره.
مگه اگه پراپرتی رو استاتیک قرار بدم میتونه متغیر های دیگه رو فراخوانی یا مقداردهی کنه؟(خودش به صورت مستقیم مقدار دهی میشه که )

Mahmoud.Afrad
جمعه 06 اردیبهشت 1398, 23:25 عصر
kala نام دیتابیس هست یا نام جدول ؟

mrzirak
شنبه 07 اردیبهشت 1398, 03:17 صبح
kala نام دیتابیس هست یا نام جدول ؟
نام جدولی که در دیتابیس هستش

رامین مرادی
شنبه 07 اردیبهشت 1398, 09:09 صبح
نام جدولی که در دیتابیس هستش

خب الان چه ربطی به نام دیتابیس داره؟ !!
اگه به دیتابیس متصل میشید پس مشکل از نام دیتابیس نیست. با ado.netکد میزنید؟ روی متد Open کانکشن خطایی ندارید؟
نام جدولتون رو دوباره چک کنید. یا در صورت امکان کد اون قسمتی که خطا ظاهر میشه رو اینجا بنویسید ببینیم چی نوشتید.

mrzirak
شنبه 07 اردیبهشت 1398, 12:20 عصر
خب الان چه ربطی به نام دیتابیس داره؟ !!
اگه به دیتابیس متصل میشید پس مشکل از نام دیتابیس نیست. با ado.netکد میزنید؟ روی متد Open کانکشن خطایی ندارید؟
نام جدولتون رو دوباره چک کنید. یا در صورت امکان کد اون قسمتی که خطا ظاهر میشه رو اینجا بنویسید ببینیم چی نوشتید.

ببین استاد عزیز منم دقیق منظورم همینه که چرا وقتی دستی نام دیتابیس رو وارد میکنم مشکلی نداره ولی وقتی به صورت متغیر وارد میکنم جدول رو نمیاره! بله با ado.net کد میزنم و روی open connection مشکل ندارم!

mr.sirwan
شنبه 07 اردیبهشت 1398, 12:50 عصر
دوست عزیز مستحضر هستی که وقتی داری نام دیتابیس رو بصورت متغیر وارد میکنی باید دیتابیس با همون نام ساخته شده باشه؟ اون اروری که در پست اول عکسش رو گذاشتی یعنی اینکه همچین جدولی در دیتابیس وجود نداره، پس به دیتابیست وصل شده اما همچین جدولی رو پیدا نمیکنه، شما ببین دیتابیست کامل ساخته شده؟

Shadow_net
شنبه 07 اردیبهشت 1398, 16:22 عصر
public class DataAccess
{
public static string AddressIP { get; set; }
public static string DBName { get; set; }
public SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(GetConnectionString());
private static string GetConnectionString()
{
return $"Server={AddressIP};Integrated Security=SSPI;Initial Catalog={DBName}";
}
}

استفاده :

DataAccess.DBName = "Library";
DataAccess.AddressIP = @".\SqlExpress";
DataAccess da = new DataAccess();
SqlConnection sqlConnection = new SqlConnection(da.builder.ConnectionString);

mrzirak
شنبه 07 اردیبهشت 1398, 18:19 عصر
استادای عزیز مشکل رو پیدا کردم که چرا کار نمیکنه!
وقتی DataString رو ست میکنم که serverIp و دیتابیس رو از روی متغیر بخونه فقط لحظه ی لود شدن برنامه متغیر های خالی رو میخونه بعد که متغیر ها رو برابر رشته قرار دادم و DataString رو فراخوانی کردم همون مقدار اولیه که متغیر ها خالی بودن رو برمیگردونه دیگه از روی دو متغیر serverIp و DatabaseName که دوباره مقدار داخلی آنها در حالت runtimeعوض شده فراخوانی نمیشه. ( لطفا این موضوع رو راهنمایی کنید )
قابل ذکر است این متغیر ها همه در گلوبال می باشند.

Mahmoud.Afrad
شنبه 07 اردیبهشت 1398, 19:24 عصر
چند تا راه دارید
DataString را یا بصورت پراپرتی درش بیارید یا به متد تبدیل کنید. یا یک رویداد که با تغییر ip و نام دیتابیس، مقدار DataString را اصلاح کند.