یادداشت های روزانه یک برنامه نویس

برنامه نویسی وب و اندروید ، برنامه نویسی با C# & JAVA، کار با پایگاه داده SQL Server

یادداشت های روزانه یک برنامه نویس

برنامه نویسی وب و اندروید ، برنامه نویسی با C# & JAVA، کار با پایگاه داده SQL Server

مقدمه

مقدمه

با سلام خدمت تمامی دوستان و علاقه مندان به برنامه نویسی 


اینجانب مدت 10 سال است که در زمینه برنامه نویسی به صورت سرگرمی نه به عنوان کار اصلی فعالیت دارم ولی مدتی است که تصمیم گرفته ام رو ی این قضیه جدی تر کار کنم تا شاید بتوانم فیلد کاری خود را از شغل فعلی به کار مورد علاقه خودم یعنی برنامه نویسی تغییر بدم.

در طول این فرآیند هر چند گاهی به مشکلاتی بر میخورم که حتی چند روز برای برطرف کردن آنها تلاش میکنم   برای همین تصمیم گرفتم مشکلاتی را که من با زحمت زیاد حل میکنم برای دیگران نیز به اشتراک بگذارم تا همه عزیزان علاقه مند بتوانند استفاده کنن .

هدف وبلاگ بیشتر آموزش نکته های کلیدی و برطرف کردن مشکلات احتمالی در کار با برنامه نویسی است .

امیدوارم که بتوانم کمک کوچکی در بالا بردم اطلاعاتت شما عزیزان باشم.


استخراج داده با Ajax از partialview و قرار دادن آن در المان html

استخراج داده با Ajax از partialview و قرار دادن آن در المان html


در این مثال وقتی فرم RecordP مخفی می شود تابع Ajax اجرا شده و مقادیر را از جدول خوانده و آن را مجددا به روز می کند.



<script type="text/javascript">

 

    $(document).ready(function () {

        $("#RecordP").on("hide.bs.modal", function () {               

                $.ajax({

                    type: "GET",

                    url: '/FBProject/GetAllProjectPartial',

                    //data: formData,

                    contentType: false,

                    processData: false,

                    dataType: "html",

                    cache: false,

                    success: successFunc,

                    error: errorFunc,

                    complete: completeFunc

                });

 

                function successFunc(data)

                {

                  $('#mainpage').html(data);

                }

                function errorFunc() { alert("خطا در آپلود فایل"); }

                function completeFunc() { $('#loading').remove(); }

        });

 

    });

</script>


باند کردن مدل به DropDownList درMVC


باند کردن مدل به DropDownList   درMVC


 

کدهای کنترلر برای فرستادن داده های مدل



        public ActionResult Create()

        {

            ViewBag.FBAbnieVahedID = new SelectList(db.FBAbnieVahed, "FBAbnieVahedID", "FBAbnieVahedName");

            return View();

        }

 

کدهای view برای نمایش داده ها  :


 

      <div class="form-group">

            @Html.LabelFor(model => model.FBAbnieVahedID, "واحد", htmlAttributes: new { @class = "control-label col-md-2" })

            <div class="col-md-10">

                @Html.DropDownList("FBAbnieVahedID", null, htmlAttributes: new { @class = "form-control" })

                @Html.ValidationMessageFor(model => model.FBAbnieVahedID, "", new { @class = "text-danger" })

            </div>

        </div>

 

پارمتر اول Html.DropDownList که به صورت String می باشد مشخص کننده نام پارامتر ViewBag ی می باشد که داده ها مدل توسط آن ارسال شده است.

 

ست کردن مقدار null به صورت پیش فرض برای DropDownList


 

@Html.DropDownList("MachBrandID", (SelectList)ViewBag.MyList, "انتخاب کنید", htmlAttributes: new { @class = "form-control" })


ست کردن مقدار ارسالی از مدل برای DropDownList برای حالت ویرایش


ست کردن آی دی برای کنترل



  @Html.DropDownList("MachBrandID", null, htmlAttributes: new { @class = "form-control", id = "mbrand" })

 


مقدار دهی کنترل از طریق آی دی :


    $("document").ready(function () {

        $('#mbrand').val('@Model.MachBrandID');

    });

اضافه کردن کد جاوا اسکریپت از کنترلر به view

اضافه کردن کد جاوا اسکریپت از کنترلر به view


فرض کنیدمیخواید  کدهای جاوا را توسط سی شارپ به صورت text تولید کرده و در صفحه خود قرار دهید برا ی اینکار ابتدا یک کنترلر ساخته و کدهای جاوا را توسط آن تولید کرده و ماننده نمونه زیر بر میگردانید 


کد اکشن از کنترلر


        public ActionResult addjs()

        {

            String ss = "$('#opener').click(function () {$('#dialog').dialog('open');});";

 

            return Content(ss);

        }


سپس این کدها را می توانید به دو صورت زیر در صفحه خوداجرا کنید :


 

<script type="text/javascript"> @{ Html.RenderAction("addjs", "MachGroup"); } </script>

 

<script type="text/javascript" src="~/MachGroup/addjs"></script>



پر کردن مدل با stored procedure با EF Entity Framework

پر کردن مدل با stored procedure  با  EF  Entity Framework


کد کامل تابع اجرای این پروسه به صورت زیر است:


public static List<T> GetDataByParametrSP<T>(string SPName, DbContext context ,SqlParameter[] sqlParameter =null)

        {

            if (SPName == null || context == null)

            {

                //throw (new NullValueSend("Tabale name or Contex is null"));

                throw (new Exception("SPName name or Contex is null"));

            }

 

            List<T> result = new List<T>();

            string sqlp = " ";

            if (sqlParameter!=null)

            {

            foreach (var item in sqlParameter)

            {

                sqlp += " " + item.ParameterName;

            }

            result = context.Database.SqlQuery<T>(SPName+ sqlp, sqlParameter).ToList();

            return result;

            }

 

            result = context.Database.SqlQuery<T>(SPName).ToList();

            return result;

        }

پارامترهای این تابع به ترتیب 

1- نام  stored procedure موجود در دیتابیس

2- شی Context تعریف شده در برنامه برای ارتباط با دیتابیس

3- پارامترهای stored procedure به صورت آرایه این بخش میتواند خالی یا صورت Null ارسال شود یعنی هیچ پارامتری وجود نداشته باشد 

فقط به این نکته توجه کنید که تابع به صورت جنریک می باشد و قبل از استفاده باید نوع مدل را به صورت جنریک برای آن مشخص کنید 

خروجی این تابع یک لیست از مدل ارسال شده می باشد که توسط stored procedure پر شده است.

مثال 

  List<citylist =GetDataByParametrSP<city>("GetCity", db);


در مثال بالا  یک  stored procedure در دیتابیس وجود دارد که لیست شهرها را بر می گرداند.

در این مثال مدل City به صورت جنریک به تابع پاس داده شده  و خروجی تابع لیست از مدل شهر ها خواهد بود 

تعریف GUID برای یک فیلد

تعریف GUID  برای یک فیلد

 

public Guid IDUnic { get; set; }


اگه به صورت بالا تعریف شود مقدار Guid به صورت خودکار توسط SQL Server داده می شود.

و اگر به صورت زیر تعریف شود مقدار Guid توسط C# معین می شود.


     public Ostan()

        {

            IDUnic = new Guid();

        }

        [Key]

        public Guid IDUnic { get; set; }


از دستور زیر برای مشخص کردن وضعیت یک رکورد در دیتابیس استفاده می شود:

حالتهای مختلف : حذف شده اضافه شده ذخیره نشده تغییر داده شده بدون تغییر 


db.Entry(personel).State.ToString();

روش انتقال داده بین View و Controller

روش انتقال داده بین View  و Controller


 

استفاده از ViewData دادن متغییر رشته :


        public ActionResult Index01()

        {

            ViewData["hh"] = " Hello Godarzi";

            return View();

        }

برداشت متغییر رشته :

<body class="container">

    <div>@ViewData["hh"]</div>

یا

    <div>@ViewBag.hh</div>

</body>

 

ارسال با ViewBag


namespace MVCView.Models

{

    public class Person

    {

        public int ID { get; set; }

        public String FullName { get; set; }

    }

}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

        public ActionResult Index02()

        {

            Person mPerson = new Person()

            {

                ID = 12,

                FullName ="Salman"

            };

            ViewBag.myPeron = mPerson;

            return View();

        }

دریافت :

<h1>@ViewBag.myPeron.ID</h1>

 

<h1>@ViewBag.myPeron.FullName</h1>

 

روش دوم دریافت شی :

 

@{

    MVCView.Models.Person Mpeson = ViewBag.myPeron as MVCView.Models.Person;

    <h1>-------------------------</h1>

    <h3>@Mpeson.ID</h3>

    <h3>@Mpeson.FullName</h3>

}


 

روش سوم ارسال با Model


 

public ActionResult Index03()

        {

            Person mPerson = new Person()

            {

                ID = 12,

                FullName = "Salman"

            };

            return View(mPerson);

        }

دریافت :

@model MVCView.Models.Person

@{

    ViewBag.Title = "Index03";

}

 

<h2>Index03</h2>

<h1>-------------------------</h1>

 

<h3>ID :  @Model.ID </h3>

<h3>FullName : @Model.FullName</h3>

 

روش چهارم استفاده از ViewModels :  برا ی این کار ابتدا یک پوشه (فضا نام) به نام ViewModels در پروژه ایجاد کرده و کلیه کلاس ها یا متغغیرهایی که نیاز است در View استفاده شود به صورت یک کلاس در آن تعریف میکنیم و آن را برای View  ارسال می کنیم :

 

کلاس مدل برای View

namespace MVCView.ViewMidels

{

    public class Factory

    {

        public String FactoryName { get; set; }

        public Person Person { get; set; }

    }

}

 

 تعریف اکشن :

        public ActionResult Index04()

        {

          

            Person mPerson = new Person()

            {

                ID = 12,

                FullName = "Salman"

            };

 

            Factory factory = new Factory()

            {

                FactoryName ="Kia Sport",

                Person = mPerson

            };

 

            return View(factory);

        }

تعریف view

 

@model MVCView.ViewMidels.Factory

@{

    ViewBag.Title = "Index04";

}

 

<h2>Index04</h2>

 

<h1>-------------------------</h1>

<h3>Factory :  @Model.FactoryName </h3>

<h1>-------------------------</h1>

 

<h3>ID :  @Model.Person.ID </h3>

<h3>FullName : @Model.Person.FullName</h3>


ارسال آرایه :


 

        public ActionResult Index05()

        {

            List<Person> Lperon = new List<Person>()

            {

                new Person(){ID=1,FullName="Ali"},

                new Person(){ID=2,FullName="Hassan"},

                new Person(){ID=3,FullName="Salman"},

                new Person(){ID=4,FullName="Sepehr"}

            };

            return View(Lperon);

        }

دریافت در View

 

@model List<MVCView.Models.Person>

@{

    ViewBag.Title = "Index05";

}

 

<h2>Index05</h2>

 

@{

    if(Model.Count!=0)

    {

        foreach(var pp in Model)

        {

            <h5>ID:  @pp.ID</h5>

            <h5>Name:  @pp.FullName</h5>

            <hr/>

        }

    }

 

}

ارسال پارمترها به صورت اختیاری به stored procedure برای جستجو

ارسال پارمترها به صورت اختیاری به stored procedure برای جستجو


شکل ساده کد آن به صورت زیر می باشد:


SELECT Id, col1, col2, col3, col4

FROM    myTable

WHERE   (condition1 OR @Param1 IS NULL)

AND     (condition2 OR @Param2 IS NULL)

AND     (condition3 OR @Param3 IS NULL)

...

AND     (conditionN OR @ParamN IS NULL



یه نمونه عملی از اجرای این کد به صورت زیر می باشد:


SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

CREATE PROCEDURE  [dbo].[OMmaghaleViewPrsd]

 

@rownum int = null ,

       @maghaletypeID int = null,

       @countstep int = 5

AS

BEGIN

select * from OMmaghaleView

 where

 (RowCunter between @rownum and @rownum + @countstep or @rownum IS NULL or @rownum=-1) and

 (OMmaghaleTypeID= @maghaletypeID or @maghaletypeID =-1 or @maghaletypeID IS NULL )

END








ساخت Pivot Table از طریق SQL Server


 ساخت Pivot Table از طریق SQL Server


نمونه کد به کار رفته برای ساخت به صورت زیر می باشد:


CREATE TABLE yt

(

  [Store] int,

  [Week] int,

  [xCount] int

);

   

INSERT INTO yt

(

  [Store],

  [Week], [xCount]

)

VALUES

    (102, 1, 96),

    (101, 1, 138),

    (105, 1, 37),

    (109, 1, 59),

    (101, 2, 282),

    (102, 2, 212),

    (105, 2, 78),

    (109, 2, 97),

    (105, 3, 60),

    (102, 3, 123),

    (101, 3, 220),

    (109, 3, 87);

   

   

DECLARE @cols AS NVARCHAR(MAX),

    @query  AS NVARCHAR(MAX)

 

select @cols = STUFF((SELECT ',' + QUOTENAME(Week)

                    from yt

                    group by Week

                    order by Week

            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

 

set @query = 'SELECT store,' + @cols + ' from

             (

                select store, week, xCount

                from yt

            ) x

            pivot

            (

                sum(xCount)

                for week in (' + @cols + ')

            ) p '

 

execute(@query);


دستور STUFF برای حذف اولین کاما به کار می رود

دستور QUOTENAME برای اضافه کردن براکت به کار می رود.

دستور FOR XML PATH برای تبدیل به یک رشته به کار می رود


دستور کامل به صورت زیر می باشد


DECLARE @cols AS NVARCHAR(MAX),

    @query  AS NVARCHAR(MAX)

 

select @cols = STUFF((SELECT ',' + QUOTENAME(Hcol)

                    from TableName

                    group by Hcol

                    order by Hcol

            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

 

set @query = 'SELECT Vcol,' + @cols + ' from

             (

                select Vcol, Hcol, SummeyCol

                from TableName

            ) x

            pivot

            (

                sum(SummeyCol)

                for Hcol in (' + @cols + ')

            ) p '

 

execute(@query);



 

TableName : اسم جدول

Hcol : سطح افقی یا ستونها

Vcol : سطح عمودی یا سطرها

SummeyCol : ستون محاسباتی





فعال کردن Web API هنگام استفاده اجرای برنامه از طریق Startup


فعال کردن Web API هنگام استفاده اجرای برنامه از طریق Startup


برای این کار ابتدا باید پکیج زیر را نصب کنیم


Install-Package Microsoft.AspNet.WebApi.OwinSelfHost


سپس کد های زیر را به متد Configuration کلاس Startup اضافه کنیم


[assembly: OwinStartup(typeof(IdentitySample.Startup))]

 

namespace IdentitySample

{

    public partial class Startup

    {

        public void Configuration(IAppBuilder app)

        {

 

            HttpConfiguration config = new HttpConfiguration();

            WebApiConfig.Register(config);

 

            app.UseWebApi(config);

            ConfigureAuth(app);

        }

    }

} 

رشته اتصال به پایگاه داده در ASP.MVC

رشته اتصال به پایگاه داده در ASP.MVC 


برای این کار رشته زیر را به فایل Web.config اضافه نمایید :

برای ورود با کاربرهای ویندوز از رشته زیر استفاده نمایید :

<connectionStrings>

    <add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=**DataBaseName**;Integrated Security=SSPI" providerName="System.Data.SqlClient" />

  </connectionStrings>

برای ورود با کاربر SQL Server از رشته زیر استفاده نمایید:

  <connectionStrings>

    <add name="sepehr" connectionString="Data Source=.;Initial Catalog=نام دیتابیس;User ID=نام کاربری;Password=پسورد" providerName="system.Data.SqlClient" />

تغییر عنوان هر اکتیویتی در اندروید استودیو

تغییر عنوان هر اکتیویتی در اندروید استودیو


برای این کار باید نام اکتیوتی مورد نظر را پیدا کرده و خاصیت lable را مانند زیر را در مانیفست انجام داد :


<activity android:name=".PersonalForm" android:label="اضافه کردن پرسنل"></activity>





تابع نمایش لودینگ در اندروید استودیو

تابع نمایش لودینگ   در اندروید استودیو


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


@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
private void showProgress(final boolean show) {
   
// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
    // for very easy animations. If available, use these APIs to fade-in
    // the progress spinner.
   
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
       
int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);

       
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
       
mLoginFormView.animate().setDuration(shortAnimTime).alpha(
                show ?
0 : 1).setListener(new AnimatorListenerAdapter() {
           
@Override
           
public void onAnimationEnd(Animator animation) {
               
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
            }
        });

       
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
       
mProgressView.animate().setDuration(shortAnimTime).alpha(
                show ?
1 : 0).setListener(new AnimatorListenerAdapter() {
           
@Override
           
public void onAnimationEnd(Animator animation) {
               
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
            }
        });
    }
else {
       
// The ViewPropertyAnimator APIs are not available, so simply show
        // and hide the relevant UI components.
       
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
       
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
    }
}

تنظیمWEB API برای ایجاد خروجی به صورت JSON


تنظیمWEB API برای ایجاد خروجی به صورت JSON


روش اول 

برای این کار کدهای زیر را به قسمت Global.asax اضافه نمایید:


GlobalConfiguration.Configuration.Formatters.

            JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

            GlobalConfiguration.Configuration.Formatters

            .Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);



روش دوم :

یا اضافه کردن کد زیر به App_Start / WebApiConfig.cs

 

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

روش نصب پکیج ها ویژال استودیو به صورت آفلاین


روش نصب پکیج ها  ویژال استودیو به صورت آفلاین


برای این کار از دستور زیر در خط دستوری نیوگیت استفاده کنید


Install-Package C:\Path\To\Some\File.nupkg

تنظیمات برای پست داده ها فارسی


تنظیمات برای پست داده ها فارسی 


در هنکام کار با برنامه .NET هر زمان که نیاز به پست داده های JSON به صورت فارسی داشید برای جلوگیری از بروز خطا شی WebClient را به صورت زیر تنظیم کنید تا داده ها به صورت صحیح پست شوند.

objWebClient = new WebClient();

objWebClient.Headers[HttpRequestHeader.ContentType] = "application/json ; charset=utf-8";

objWebClient.Encoding = UTF8Encoding.UTF8;