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

نام تاپیک: نمایش تصاویر در GridView فقط در یک ارتباط با دیتابیس و نه چند ارتباط

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    Question نمایش تصاویر در GridView فقط در یک ارتباط با دیتابیس و نه چند ارتباط

    با سلام
    همانطور که می دانیم روش معمول برای اینکه عکس ها در GridView نشان داده شود ، استفاده از کدهای زیر است ( کدهایی که من در ایبوک پیدا کردم و دیده ام که بقیه هم معمولا همین پیشنهاد را دارند ) . ( البته برنامه ی کاملش را هم فرستاده ام ، دیتابیس را از پوشه ی APP_Data بردارید ) :
    به نظر من ، این کدهای پیشنهادی یک مشکل اساسی دارد و آن اینکه برای هر عکس ، می خواهد یک ارتباط با دیتابیس بزند . این اصلا صحیح نیست . ما باید کاری کنیم که بار روی دیتابیس کمتر شود . مثلا باید کاری می کردیم که در یک ارتباط تمام عکس ها را در یک DataTable بریزد و برنامه برای نمایش عکس ها از همین DataTable استفاده کند و دیگر هیچ ارتباطی با دیتابیس زده نشود ( چون قبلا تمام عکس ها را گرفته ). می خواستم بپرسم کسی برای رفع این مشکل راه حلی ندارد؟
    کد HTML:
    <%@ WebHandler Language="C#‎" Class="ImageFromDB" %>
    using System;
    using System.Web;
    public class ImageFromDB : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
    string connectionString =
    System.Configuration.ConfigurationManager.ConnectionStrings["My_DBConnectionString"].ConnectionString;
    // Get the ID for this request.
    string id = context.Request.QueryString["_id"];
    if (id == null) throw new ApplicationException("Must specify ID.");
    // Create a parameterized command for this record.
    System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connectionString);
    string SQL = "SELECT _image FROM Table_image WHERE _id=@ID";
    System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(SQL, con);
    cmd.Parameters.AddWithValue("@ID", id);
    try
    {
    con.Open();
    System.Data.SqlClient.SqlDataReader r =
    cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess);
    if (r.Read())
    {
    int bufferSize = 100; // Size of the buffer.
    byte[] bytes = new byte[bufferSize]; // The buffer.
    long bytesRead; // The # of bytes read.
    long readFrom = 0; // The starting index.
    // Read the field 100 bytes at a time.
    do
    {
    bytesRead = r.GetBytes(0, readFrom, bytes, 0, bufferSize);
    context.Response.BinaryWrite(bytes);
    readFrom += bufferSize;
    } while (bytesRead == bufferSize);
    }
    r.Close();
    }
    finally
    {
    con.Close();
    }
    }
    
    public bool IsReusable {
    get {
    return false;
    }
    }
    }
    فایل های ضمیمه فایل های ضمیمه

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

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