سلام
کدی دارم که کوئری هایی را از ورودی می گیرد و اجرا می کند. کوئری ها که از ورودی دریافت می شوند دارای پارامترهایی است که در کد برنامه مقداردهی می شوند. به طور مثال
select * from $MainSchema$.Table1 در کوئری فوق نحوه تعیین مقدار MainSchema در داخل کد تعیین شده است. این پارامتر در کوئری های مختلف متفاوت می باشد. متغییری با نام Parameter در کد تعریف شده که کوئری های فوق را گرفته و parse می کند هر جا با الگویی که تعیین شده برخورد کرد پارامتر فوق را جدا می کند تا مقدار آن را محاسبه کند.
مشکلی که دارم در نحوه replace کردن پارامتر با مقدار آن است. به طور مثال در کد برای متغییر MainSchema = "test_env" تعیین شده است. حال در زمان pars کوئری مقدار Parameter = "MainSchema " مشخص شده است. حال که می خواهم در کوئری به جای متغییرMainSchema مقدار آن یعنی test_env را قرار دهم نمی شود و همان متغییر MainSchema قرار می گیرد.
کد فوق بخشی از کد اصلی می باشد. تابع GetVariable را نمی دانم چکونه پیاده سازی کنم تا مقدار متغییری که در ParamName مشخص شده است را برگرداند.
var Desc = "select * from $MainSchema$.Table1" var pattern = @"\$\w+/[a-zA-Z0-9_\-\{\}]+\$"; var Params = Regex.Matches(Desc, pattern).Cast<Match>().Select(m => m.Value).ToArray(); foreach (string Param in Params) { var ParamReplace = Param; var ParamType = Param.Replace("$", "").Split('/')[0].ToUpper(); var ParamName = Param.Replace("$", "").Split('/')[1]; ParamValue = GetVariable(ParamName); Desc = Desc.Replace(ParamReplace, ParamValue); }
در کوئری باید برای مقدار یک پارامتر تعریف کنید و سپس توسط SqlCommand مقدار را جایگزین کنید
سرچ کنید use parameter in sql ado.net
تعریف کردم. همون پارامتر MainSchema که در کوئری وجود داره. از SqlCommand نمی تونم استفاده کنم چرا که بعد از اصلاح کوئری, اجرای آن توسط یک وب سرویس انجام می شود و خروجی آن در برنامه من نمایش داده می شود.
پارامتر باید در webservice تعریف بشه اگر در شته هست داخل {} قرار دهید و با متد replace جایگرین کنید
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)