نمایش نتایج 1 تا 9 از 9

نام تاپیک: تعیین DataTable برای نمایش Cross-Table Query

  1. #1
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,146

    تعیین DataTable برای نمایش Cross-Table Query

    سلام

    من در برنامم به روش Typed-Dataset به بانک اطلاعاتی وصل شدم و در زمان نمایش اطلاعات همان جدول مشکلی ندارم. حالا یک Stored Procedure ایجاد کردم که حدود 3 جدول را با هم Joint میکنه و مقادیر دلخواه را نمایش میده. در خود SQL که تست میکنم مشکلینیست و درست کار میکنه ولی در برنامه خودم نمیدونم چطور باید اوم رو فراخوانی کنم و هر کاری میکنم با خطا مواجه میشم و اطلاعات با هیچ نوع از DataTableهای من همخوانی ندارد.

    ممنون اگر راهنمایی کنید

  2. #2

    نقل قول: تعیین DataTable برای نمایش Cross-Table Query

    سلام typed dataset همون بایندینگ سُرس هست؟ منم همین مشکل رو دارم. شما هم مثل من پروسیجر هایی که میسازید رو نمیبینید؟

  3. #3
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,146

    نقل قول: تعیین DataTable برای نمایش Cross-Table Query

    خیر همون نیست. در واقع اطلاعاتی که از یک جدول فراخوانی میکنید باید در Datasetی که دارای ستونهایی همنوع هستند قرارگیرند ولی از اونجایی که من اطلاعاتم از 3 جدول و بصورت Join شده فراخوانی میشوند در DataSet که توسط ویزارد برنامه تولید میشه و مطابقت با جداول بانک اطلاتیم داره، برنامه رو با خطا مواجه میکنه. خودم دارم این کار رو انجام میدم و جواب میده ولی دنبال راهی بهتر و شاید ساده تر میگردم.

    خودم اینکار رو دارم انجام میدم


    1. ابتدا یک DataTable میسازم
    2. ستونهایی مطابق با ستون های فراخوانی شده به DataTable ایجاد شده اضافه میکنم.(با ویژگی های مورد نظر مثل ReadOnly, Unique, DataType,...)
    3. بعد اطلاعات رو فراخوانی میکنم و در یک حلقه مقادیر ستون های فراخوانی شده را در DataTable خودم قرار می دم و در انتها به برنامه ارسال می کنم (این کار در لایه DataAccessLayer انجام میشه)

  4. #4
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,146

    نقل قول: تعیین DataTable برای نمایش Cross-Table Query

    یه مشکلی که دارم اینه که چطور میتونم با Loop در Stored Proceuret فراخوانی شده حرکت کنم؟

  5. #5
    مدیر بخش آواتار danialafshari
    تاریخ عضویت
    تیر 1387
    محل زندگی
    هر کجا هستم باشم آسمان مال من است
    پست
    2,909

    نقل قول: تعیین DataTable برای نمایش Cross-Table Query

    با سلام
    dataset رو باز کنید روی فضای خالی کلیک راست و TableAdapter رو انتخاب کنید سپس در مرحله ویزارد Stored Procedure مربوطه رو انتخاب کنید
    نقل قول نوشته شده توسط Shadow_net مشاهده تاپیک
    سلام typed dataset همون بایندینگ سُرس هست؟ منم همین مشکل رو دارم. شما هم مثل من پروسیجر هایی که میسازید رو نمیبینید؟
    دیتاست رو از طریق پنجره Data Sources سمت چپ Configure Data Source With Wizard... بروزرسانی کنید مشکلتون حل میشه
    موفق باشید
    لطفاً از پرسیدن سوال در خصوصی خودداری کنید.
    قبل از ایجاد تاپیک، حتماً قوانین سایت را مطالعه فرمایید.
    قوانین پرسش های دانشجویی
    برای درست وارد شدن کد در قالب C#‎‎‎ سایت، ابتدا کد رو درون Notepad.exe کپی سپس از اونجا به سایت در قالب C#‎‎‎ منتفل کنید
    نرم افزار code manager دستیار برنامه نویسان جهت نگهداری کد ها

  6. #6
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,146

    نقل قول: تعیین DataTable برای نمایش Cross-Table Query

    من با این روش مشکلم رو حل کردم


    public DataTable spFINGetByProjectIDv_Get(int TotalRow, int ProjectID)
    {

    try
    {
    DataTable dt = new DataTable();
    DataRow dr = default(DataRow);


    using (SqlConnection connection = new SqlConnection(_dbConnectionString))
    {

    SqlCommand command = new SqlCommand();
    SqlDataReader reader = default(SqlDataReader);

    command.Connection = connection; //New SqlConnection(_dbConnectionString)
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@NumberOfRows", TotalRow);
    command.Parameters.AddWithValue("@ProjectID", ProjectID);
    command.CommandText = "qcsFIN.spFINGetByProjectIDv";
    connection.Open();

    reader = command.ExecuteReader();

    if (reader.HasRows)
    {
    int n = 1;

    // Call Read before accessing data.
    while (reader.Read())
    {

    if (n == 1)
    {
    n++;
    for (int i = 0; i <= reader.FieldCount - 1; i++)
    {
    DataColumn dcColumn = new DataColumn();
    dcColumn.DataType = reader.Item(i).GetType;
    dcColumn.ColumnName = reader.GetName(i).ToString();
    dt.Columns.Add(dcColumn);
    }
    }

    dr = dt.NewRow;
    for (int i = 0; i <= reader.FieldCount - 1; i++)
    {
    dr[reader.GetName(i).ToString()] = reader.Item(reader.GetName(i).ToString());
    }
    dt.Rows.Add(dr);
    }
    }
    // Call Close when done reading.
    reader.Close();
    }


    return dt;
    }
    catch (Exception ex)
    {
    throw (new Exception(ex.Message));
    return null;
    }
    }
    آخرین ویرایش به وسیله mmbguide : سه شنبه 01 خرداد 1397 در 12:26 عصر دلیل: اصلاح کد

  7. #7
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,146

    نقل قول: تعیین DataTable برای نمایش Cross-Table Query

    توضیح کد بالا

    • تابع من یک DataTable رو برمیگردونه
    • بعد اومدم دو متغیر تعریف کردم که Datatable, DataRow هستند
    • تا اونجایی که کد command.ExecuteReader اجرا میشه رو هم کاری نداریم و مشابه همه دستورات فراخوانی اطلاعات از بانک هستش
    • بعد از بررسی اینکه آیا رکورد موجود است یا خیر یک متغیر عددی تعریف کردم با نام n که مقدار اولیه اون برابر 1 است
    • حالا وقتی کد While reader.Read اجرا میشه در واقع نشانگر در ردیف اول قرار میگیره و حالا میتونم اطلاعات مربوط به ستون های ارسال شده از SQL رو بخونم و تنها یک بار هم این عمل انجام بشه کفایت میکنه و حالا برای اینکه برنامه به درستی کار کنه، اگر مقدار n=1 باشد عملیات تولید ستون برام انجام میشه و در حلقه ای بعدی چون مقدار n بزگتر از 1 شده دیگر کدهای داخل If اجرا نمیشه.


    حلقه اول



    for (int i = 0; i <= reader.FieldCount - 1; i++)
    {
    DataColumn dcColumn = new DataColumn();
    dcColumn.DataType = reader.Item(i).GetType;
    dcColumn.ColumnName = reader.GetName(i).ToString();
    dt.Columns.Add(dcColumn);
    }



    این حلقه به تعداد فیلدهای موجود در اطلاعات ارسالی از SQL تکرار میشه
    ابتدا یک متغیر از نوع ستون اطلاعات ایجاد کردم و Type و Name ستون جدید رو از خود اطلاعات دریافتی بدست میارم
    در ادامه ستون جدید رو به DataTable ایجاد شده اضافه میکنم


    توضیح کد زیر



    dr = dt.NewRow;
    for (int i = 0; i <= reader.FieldCount - 1; i++)
    {
    dr[reader.GetName(i).ToString()] = reader.Item(reader.GetName(i).ToString());
    }
    dt.Rows.Add(dr);



    در این بخش یم ردیف جدید (خالی) به DataTable اضافه میکنم. ستون های DataTable در حلقه بالا ایجاد شده بودند
    در هر بار اجرای حلقه While من یک ردیف به DataTable اضافه میکنم و بعد به تعداد فیلدهای موجود، فیلدهای ردیف جدید رو مقدار دهی میکنم

    انشالله که توضیحاتم گنگ نبوده باشه

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

  8. #8
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,146

    نقل قول: تعیین DataTable برای نمایش Cross-Table Query

    البته کد بالا یک مشکلی داره.

    در انتها که مقدار فیلدهای دریافت شده از SQL در فیلدهای جدید از DataTable قرار میگیره نتونستم عمل Convert اطلاعات رو متناسب با ستون انجام بدم و همه اونها بصورت String مقداردهی میشند

  9. #9

    نقل قول: تعیین DataTable برای نمایش Cross-Table Query

    نقل قول نوشته شده توسط mmbguide مشاهده تاپیک
    البته کد بالا یک مشکلی داره.

    در انتها که مقدار فیلدهای دریافت شده از SQL در فیلدهای جدید از DataTable قرار میگیره نتونستم عمل Convert اطلاعات رو متناسب با ستون انجام بدم و همه اونها بصورت String مقداردهی میشند
    آقای افشاری پاسخ صحیح را دادند. راه ساده تر هم درگ کردن پروسیجر از پنجره server explorer به داخل دیتاست هست.

تاپیک های مشابه

  1. تعیین شرط برای نمایش یا عدم نمایش یک فیلد در فست ریپورت
    نوشته شده توسط ariobarzan در بخش ابزارهای گزارش سازی در دلفی
    پاسخ: 6
    آخرین پست: یک شنبه 19 خرداد 1392, 14:07 عصر
  2. پاسخ: 8
    آخرین پست: دوشنبه 17 آبان 1389, 11:34 صبح
  3. تعیین پیام برای جلوگیری از نمایش پیغام خطا در Syntax
    نوشته شده توسط look20 در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: چهارشنبه 22 اردیبهشت 1389, 20:36 عصر
  4. تعیین data type برای نمایش عکس در کریستال
    نوشته شده توسط arsalansalar در بخش VB.NET
    پاسخ: 5
    آخرین پست: پنج شنبه 12 اردیبهشت 1387, 23:02 عصر
  5. تعیین محدوده برای نمایش رکورد در دیتاگرید
    نوشته شده توسط هادی123 در بخش VB.NET
    پاسخ: 6
    آخرین پست: چهارشنبه 08 شهریور 1385, 10:27 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •