دسته بندی ها
14:09 1400/10/26

استفاده از DataTable برای دریافت اطلاعات از دیتابیس در سی شارپ

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : سی شارپ Sql Server Entity Framework WPF

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 6129
پاسخ دهنده : Sowgandi 19:26 1400/10/26

سلام دوست گرامی

مشکلی که فرمودید قابل حله و نیاز نیست شما از DataTable استفاده کنید. درسته که شما در کوئری خودتون 

SELECT * FROM CUSTOMERS

 رو نوشتید ولی تا وقتی که کوئری رو واکشی نکنید هیچ باری روی سیستم و حافظه شما قرار نمیگیره. کافیه شما قبل از قرار دادن عبارت ToList ستون های مورد نیاز خودتون رو با کمک گرفتن از Linq انتخاب کنید. به مثال زیر توجه کنید.

var ResultData = (from q in dbContext.Database.SqlQuery<CUSTOMERS>(SELECT * FROM CUSTOMERS) select new {q.Name}).ToList()

در مثال فوق اگرچه ما در رشته اس کیو ال کل ستونها رو سلکت کردیم ولی در نهایت قبل از ToList کردن دستور واکشی فقط یک ستون رو دادیم. دقیقا مشابه دستور زیر در اس کیو ال

SELECT Name FROM CUSTOMERS

در نتیجه مشکل شما حل میشه. 

ویرایش شده در یکشنبه 26 دی 1400 ساعت 19:27:14
به این پاسخ امتیاز بدهید    2
امتیاز: 871 رتبه: 3
1 نظر
mojtabahakimian : سپاس گزارم ♥ آیا میشه برای کوئری هایی که Inner Join از جداول دیگه داره هم کاری کرد ؟

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 09:59 1400/10/27
پاسخ دهنده : Sowgandi 18:37 1400/10/27

برای استفاده از کوئری های پیچیده و inner join از روش زیر استفاده کنید.


            string constring = dbContext.Database.Connection.ConnectionString;
            string query = @"SELECT Name FROM CUSTOMERS
                           INNER JOIN table2 ON CUSTOMERS.Name = table2.Name";

            List<CUSTOMERS> customers = new List<CUSTOMERS>();

            using (SqlConnection con = new SqlConnection(constring))
            {
                using (SqlCommand cmd = new SqlCommand(query, con))
                {
                    cmd.CommandType = CommandType.Text;
                    con.Open();
                    using (SqlDataReader sdr = cmd.ExecuteReader())
                    {
                        while (sdr.Read())
                        {
                            customers.Add(new CUSTOMERS
                            {
                                customerID = Convert.ToInt32(sdr["customerID"]),
                                Name = sdr["Name"].ToString()
                            });
                        }
                    }
                    con.Close();
                }

            }

جهت استفاده از کد فوق باید از کتابخانه ;using System.Data.SqlClien استفاده کنید. 

به این پاسخ امتیاز بدهید    2
امتیاز: 871 رتبه: 3
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود