string dbfDirectory = Server.MapPath("~/Content/") + "myDBF.dbf"; string connectionString = "Provider=VFPOLEDB.1;Data Source=" + dbfDirectory + ";Password=;Collating Sequence=MACHINE"; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); string CreateTableK = "Create Table myDBF (dsw_id1 int, dsw_fname v(250), dsw_lname v(250) )"; OleDbCommand cmdCreateTable = new OleDbCommand(CreateTableK, connection); cmdCreateTable.ExecuteNonQuery(); OleDbCommand cmd2 = new OleDbCommand("Insert Into myDBF Values (1, @param1, @param2)", connection); cmd2.Parameters.AddWithValue("@param1", "شهرزاد"); cmd2.Parameters.AddWithValue("@param2", "جواهری"); OleDbCommand cmd3 = new OleDbCommand("Insert Into myDBF Values (2, 'ma', 'bi')", connection); cmd2.ExecuteNonQuery(); cmd3.ExecuteNonQuery(); connection.Close(); }
تبدیلگر ایران سیستم به یونیکد
//ایجاد بانک اطلاعاتی خالی var dir = @"D:\Prog\"; // این مسیر پوشه است و نه مسیر فایل using (OleDbConnection connection = new OleDbConnection(@"Provider=VFPOLEDB.1;Data Source=" + dir)) { using (var command = new OleDbCommand()) { command.Connection = connection; command.Connection.Open(); command.CommandText = "Create Table myDBF (dsw_id1 int, dsw_fname v(250), dsw_lname v(250) )"; command.CommandType = CommandType.Text; command.ExecuteNonQuery(); } }
//ثبت اطلاعات در بانک ایجاد شده var dbPath = Path.Combine(dir, "myDBF.dbf"); using (OleDbConnection connection = new OleDbConnection(@"Provider=VFPOLEDB.1;Data Source=" + dbPath)) { using (var command = new OleDbCommand()) { command.Connection = connection; command.Connection.Open(); command.CommandText = "Insert Into myDBF Values (1, ?, ?)"; command.Parameters.AddWithValue("?", "B"); // فقط علامت سؤال در اینجا کار میکند و نه هیچ چیز دیگری command.Parameters.AddWithValue("?", "A"); command.CommandType = CommandType.Text; command.ExecuteNonQuery(); } }
using System; using System.Linq; public class Test { public static void Main() { var beatles = (new[] { new {id = 1, inst = "guitar", name = "john"}, new {id = 2, inst = "guitar", name = "george"}, new {id = 3, inst = "guitar", name = "paul"}, new {id = 4, inst = "drums", name = "ringo"}, new {id = 5, inst = "drums", name = "pete"} }); var result = beatles .GroupBy(g => g.inst) .Select(c => c.OrderBy(o => o.id).Select((v, i) => new { i, v }).ToList()) .SelectMany(c => c) .Select(c => new { c.v.id, c.v.inst, c.v.name, rn = c.i + 1 }) .ToList(); Console.WriteLine("id | inst \t| name \t| rn"); foreach (var row in result) { Console.WriteLine($"{row.id} | {row.inst}\t| {row.name} \t| {row.rn}"); } } }
id | inst | name | rn 1 | guitar| john | 1 2 | guitar| george | 2 3 | guitar| paul | 3 4 | drums| ringo | 1 5 | drums| pete | 2
AnonymousTypeها به شما این امکان را میدهند که بدون ساخت Type جدیدی چندین پراپرتی رو در یک object قرار بدید و از اون استفاده کنید.
به مثال زیر توجه کنید:
var v = new { Amount = 108, Message = "Hello" }; Console.WriteLine(v.Amount + v.Message);
دقت داشته باشید که در این مثال Typeی بنام V از قبل ساخته نشده بود و فیلدهای Amount,Message هم وجود ندارند اما با استفاده از AnonymousTypeها این امکان فراهم شده تا بتونید بدون ساخت Type، رفتار Typeها رو شبیه سازی کنید.
بطور مثال فرض کنیم میخواهیم نام و شناسه پرسنل رو در یک ComboBox نمایش دهیم. برای این منظور نیازی نیست که تمام فیلدهای مربوط به پرسنل را بازیابی نموده و تنها نام و شناسه پرسنل را نمایش دهیم و همانطور که بسیاری از شما میدانید تنها نام و شناسه پرسنل را بازیابی میکنیم که این مورد را با استفاده از AnonymousType انجام میدهیم =>
var business = new Customers(); var modelsCollection = business.GetAll(w => w.MCode); cmbCustomerName.DataSource = modelsCollection.Select(w => new { w.CustomerName, w.Code }).ToList();
چنانچه از modelsCollection فیلد و یا فیلدی را انتخاب نمیکردیم و از تمام فیلدها استفاده میکردیم برای دریافت آیتم انتخاب شده مشکلی نداشتیم و با یک Cast ساده به Model Type مورد نظر، میتوانستیم مقدار شناسه پرسنل انتخابی را بدست آوریم اما با این قطعه کد چنانچه بخواهیم عمل Casting را برای Model Type مورد نظر انجام دهیم، با خطا مواجه خواهیم شد چون Type جدید از نوع AnonymousType بوده و شامل دو فیلد CustomerName,Code میباشد.
سوالاتی که پیش خواهد آمد:
1- مقدار Code رو چطور استخراج کنیم؟
2- AnonymousType یک Type موجود نیست که بتوان آیتم انتخابی را به آن Cast نموده و مقدار Code را دریافت نمود!
.
.
.
با استفاده از Reflection قادر خواهید بود مقدار فیلد مورد نظر خود را از یک AnonymousType استخراج کنید. برای این منظور تابع زیر رو در نظر بگیرید =>
public static T GetValueFromAnonymousType<T>(object dataitem, string itemkey) { Type type = dataitem.GetType(); T itemvalue = (T)type.GetProperty(itemkey).GetValue(dataitem, null); return itemvalue; }
با استفاده از این تابع براحتی خواهید توانست مقدار Code را بدست بیاورید =>
int code = GetValueFromAnonymousType<int>(cmbCustomerName.SelectedItem, "Code");
یکی از مواردی رو که بعضی از ادمینها هیچ وقت یاد نمیگیرند این است که لطفا پس از اتمام کار ریموت، logoff کنید و سشن را باز نگه ندارید. اگر چندین سشن به همین ترتیب باز بمانند پس از مدتی با پیغام حداکثر تعداد کانکشنهای همزمان به یک سرور مواجه خواهیم شد و دیگر امکان اتصال نخواهد بود مگر اینکه یکی از سشنهای باز خاتمه پیدا کند (همچنین مسایل امنیتی را هم در نظر بگیرید). باز بودن یک سشن هم همانطور که عنوان شد به معنای فعال بودن کاربر نیست. عموما به معنای عدم logoff است.
خوب الان نیاز است که یک اتصال ریموت جهت به روز رسانی برنامهای برقرار شود اما نمیشود! کسانی هم که سشن باز بر روی سرور دارند هم اکنون در دسترس نیستند. چکار باید کرد؟
عموما این کار رو میکنند: فلانی برو دکمهی ریست سرور رو بزن! بعد هم که سرور بالا اومد دیدن دیتابیس suspect شده واقعا لذت بخش خواهد بود!
راه بهتری هم هست:
برنامهای به نام psexec از SysInternals موجود است که آنرا میتوان از آدرس ذیل دریافت کرد:
توسط این برنامه میتوان به خط فرمان سرور ریموت دسترسی یافت (البته بدیهی است که پیشتر باید این دسترسی را داشته باشید) و سپس امکان لیست کردن سشنهای باز و همچنین خاتمهی آنها میسر خواهد شد؛ به شرح زیر:
الف) دسترسی به خط فرمان سرور از راه دور
psexec \\x.x.x.x -u domain\user -p password cmd
psexec \\192.168.1.16 -u domain\admin -p password cmd
ب) لیست کردن سشنهای باز
پس از اجرای موفقیت آمیز دستور فوق، خط فرمان سرور در اختیار شما خواهد بود. اکنون دستور qwinsta را وارد کنید. در لیست ارائه شده شماره Id ها مهم است.
ج) بر اساس Id های قابل مشاهده با استفاده از دستور زیر میتوان سشن را خاتمه داد:
logoff [id# of session to quit] /v
logoff 2 /v
Windows 10 has something called Windows Subsystem for Linux and this something enables us to run Linux applications on Windows 10 using Linux without need for Hyper-V or other virtual machines. When building multi-platform applications like my open-source TemperatureStation solution then having Linux right there for testing comes very handy. This blog post shows how to get Linux running on Windows, how to install .NET Core and how to run web applications on Linux.
از روش دوم هم که استفاده میکنم باز همین طور است. یو آر ال https://localhost:5002/api/hotelroom?checkInDate=2021-06-25&checkOutDate=2021-06-26 درست میشود و an unhandled error بر میگرداند.
نصب Mono Develop 4.x در Ubuntu
اگر یک برنامه جدید را در monodevelop شروع کردید و به خطای کامپایل ذیل برخوردید:
Error: A dependency of a referenced assembly may be missing, or you may be referencing an assembly created with a newer CLR version. See the compilation output for more details. (Test1)
export PATH=/opt/mono-3/bin:$PATH export PKG_CONFIG_PATH=/opt/mono-3/lib/pkgconfig:$PKG_CONFIG_PATH mono -V
از برنامه OneNote زیاد استفاده میکنم. عموما برای یادداشت برداری از سایتها؛ فقط کافی است یک صفحه از مرورگر خودتون را با Ctrl+A انتخاب و با Ctrl+C در حافظه کپی کنید. سپس با Ctrl+V در OneNote ، کل صفحه با همان فرمت اصلی و تمام تصاویر، جداول و غیره ذخیره خواهد شد. همچنین در OneNote 2010، دریافت تصاویر از سایتها به صورت asynchronous است (برخلاف نگارش 2007 آن) و حین دریافت تصاویر برنامه متوقف نمیشود.
اما اگر سرویس Windows search که کار indexing را انجام میدهد خاموش باشد:
- احتمالا OneNote شما بالای 400 مگ رم مصرف خواهد کرد.
- مرتبا هنگ میکند.
- عموما CPU Usage ایی بالای 50 درصد به صورت مداوم خواهید داشت.
- جستجوی آن دیگر درست کار نمیکند و بسیار بسیار کند خواهد بود.
C# 7 - Discards
علت وجود Discards در C# 7.0
گاهی از اوقات میخواهیم از مقادیر بازگشت داده شدهی توسط متدها، خصوصا آرگومانهای out، صرفنظر کنیم:
if (bool.TryParse("TRUE", out parsedValue)) { /* Do your stuff */ }
if (bool.TryParse("TRUE", out bool _)) { /* Do your stuff */ }
مکانهایی که میتوان از Discards در آنها استفاده کرد
پارامترهای از نوع out، یکی از مکانهایی هستند که میتوان از Discards برای معرفی آنها استفاده کرد. سایر کاربردهای آن شامل موارد ذیل میشوند:
-در تعاریف tuples برای صرفنظر کردن از پارامتری خاص (Value Tuple deconstructions)
var (arg1, _, _) = (1, 2, 3);
-در pattern matching برای صرفنظر کردن از نوعی خاص
// in pattern matching switch (input) { case int number: Add(number); break; case object[] _: // ignore break; }
- در پارامترهای delegates
// in delegate parameters var usersWithPosts = context.Users .Join(context.Posts, user => user.UserId, post => post.UserId, (user, _) => user);
واژهی کلیدی _
یک واژهی کلیدی زمینهای است
_ یک contextual keyword به حساب میآید؛ مانند var. به این معنا که اگر پیشتر در کدهای خود، یک متغیر محلی را به نام _ تعریف کرده باشید، با _ بکار رفتهی به صورت discard، تداخل نخواهد کرد:
bool _ = false, v = false; if (bool.TryParse("TRUE", out var _)) { /* Do your stuff */ v = _; }
قابلیت تعریف مجدد را دارد
در مثال
var (arg1, _, _) = (1, 2, 3);