کلا روش کاریتون اشتباهه ، کانکشن استرینگ رو باید در وب کانفیگ ست کنید .
اما اینکه اینجا چرا جواب گو نیست کمی تامل برانگیزه ! چون روش کار درسته استاندارد نیست ولی نباید مشکلی هم داشته باشه ، حالا به جای استفاده از روش $ که استفاده کردید که من برای اولین بار دیدم واتفاقا خیلی هم سینتکس زیبایی داره ، از روش سنتی زیر استفاده کنید :
datastring =""+ serverid+""+dbname
متدها رو static کنید ببینید مشکلتون حل میشه ؟
وقتی در زمان تعریف متغییر نام دیتابیس که به صورت استاتیک تعریف کردید مقدار دهی اولیه نکردید CLR مقدار خالی در رشته قرار میده! (قوانین تعریف متغییر در حافظه هیپ)
که البته بهتره که حتما یک مقدار پیش فرض برای این متغییرها در سازنده کلاس تعریف ویا در همان قسمت تعریف متغییر ویا دریک بلاک استاتیک مقدار دهی اولیه انجام بدید!
بنابراین در چه زمانی مقدار نام دیتابیس را ست میکنید؟
بهتر هست که property را هم استاتیک تعریف کنید و قبل از فراخوانی رشته کانکشن استرینگ حتما مقدار نام دیتابیس را ست کنید.
ممنون از وقتتون
همین کار ها رو هم کردم و دقیقا با لود شدن فرم متغیر ها مقدار دهی میشن و باید اصولا مشکلی نداشته باشه که در اصل کار نمیکنه.
برای اینکه مطمئن بشم که هربار متغیر ها مقدار دهی میشن از حالت دیباگ و با یک مسیج باکس هم حتی امتحان کردم و متغیر ها به صورت صحیح مقدار دهی میشن ولی بازم به مشکل میخوره.
مگه اگه پراپرتی رو استاتیک قرار بدم میتونه متغیر های دیگه رو فراخوانی یا مقداردهی کنه؟(خودش به صورت مستقیم مقدار دهی میشه که )
kala نام دیتابیس هست یا نام جدول ؟
دوست عزیز مستحضر هستی که وقتی داری نام دیتابیس رو بصورت متغیر وارد میکنی باید دیتابیس با همون نام ساخته شده باشه؟ اون اروری که در پست اول عکسش رو گذاشتی یعنی اینکه همچین جدولی در دیتابیس وجود نداره، پس به دیتابیست وصل شده اما همچین جدولی رو پیدا نمیکنه، شما ببین دیتابیست کامل ساخته شده؟
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);
استادای عزیز مشکل رو پیدا کردم که چرا کار نمیکنه!
وقتی DataString رو ست میکنم که serverIp و دیتابیس رو از روی متغیر بخونه فقط لحظه ی لود شدن برنامه متغیر های خالی رو میخونه بعد که متغیر ها رو برابر رشته قرار دادم و DataString رو فراخوانی کردم همون مقدار اولیه که متغیر ها خالی بودن رو برمیگردونه دیگه از روی دو متغیر serverIp و DatabaseName که دوباره مقدار داخلی آنها در حالت runtimeعوض شده فراخوانی نمیشه. ( لطفا این موضوع رو راهنمایی کنید )
قابل ذکر است این متغیر ها همه در گلوبال می باشند.
چند تا راه دارید
DataString را یا بصورت پراپرتی درش بیارید یا به متد تبدیل کنید. یا یک رویداد که با تغییر ip و نام دیتابیس، مقدار DataString را اصلاح کند.