PDA

View Full Version : مشکل عدم نشان دادن داده های دیتابیس با توجه به اتصال درست (عدم اعلان خطا توسط برنامه)



aminghaderi
چهارشنبه 31 تیر 1388, 00:38 صبح
با سلام و ارادت.
یه مشکل عجیب برام پیش اومده و این مشکل به این صورته که با توجه به اتصال به پایگاه و وجود داده و همجنین تنظیم دیتا گریدویو برنامه در موقع اجرا ، داده ها رو که درون گریدویو نمایش نمی دهد که هیچ ! خطایی هم اعلام نمی کند؟؟؟!!!
کد:


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;


public partial class _Default : System.Web.UI.Page
{
SqlConnection cnn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter sda = new SqlDataAdapter();
DataSet ds = new DataSet();

protected void Button1_Click(object sender, EventArgs e)
{
cnn.ConnectionString = "Data Source=AMIN-A45ADB7E50\\SQLEXPRESS;Initial Catalog=admin_university;Integrated Security=True";
cmd.CommandText = "select * from student";
cmd.Connection = cnn;
sda.SelectCommand = cmd;
cnn.Open();
sda.Fill(ds, "amin");
cnn.Close();

GridView1.DataSource = ds;
GridView1.DataMember = "amin";

}
}
؟؟؟؟
دوستان و اساتید لطفا راهنمایی کنند اشکال برنامه کجاست؟؟؟؟
علت نشان ندادن گریدویو چیست؟

در ضمن برنامه من یه سایت asp.net 2 و پایگاه هم sqlserver 2005 هست.
---------------
و یک نکته الان متوجه شدم !
کد در حالت windows APP به طور کامل و درست اجرا میشه؟؟؟!!!!
و فقط در حالتwebsite مشکل پیدا می کنه؟؟؟!!!!
که منم حالت وب سایت مد نظرم هست.:افسرده::افسرده:

مهدی کرامتی
چهارشنبه 31 تیر 1388, 04:35 صبح
پس از خط

GridView1.DataMember = "amin";
این دستور را اضافه کن:

GridView1.DataBind();

aminghaderi
پنج شنبه 01 مرداد 1388, 00:09 صبح
با تشکر از شما
اما مشکل حل نشد!
در ضمن من توسط کد بالا توانستم عمل درج رو در دیتا بیس انجام بدم و تاجایی که من متوجه شدم مشکل سر اتصال دیتاست به کنترول ها هست.
مثل گریدویو و دیتیلز ویو که من امتحان کردم؟!

در استفاده از فرمان:

GridView1.DataBind();
خطای زیر رو اعلام می کند:


Server Error in '/WebSite8' Application.

The IListSource does not contain any data sources.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: The IListSource does not contain any data sources.

Source Error:

Line 36: DetailsView1.DataSource = ds;
Line 37: DetailsView1.DataMember = "amin";
Line 38: DetailsView1.DataBind();
Line 39:
Line 40:
Source File: c:\Documents and Settings\Amin\My Documents\Visual Studio 2005\WebSites\WebSite8\Default.aspx.cs Line: 38

Navid Asadi
پنج شنبه 01 مرداد 1388, 09:59 صبح
سلام من هم این مشکل رو دارم البته تو ویسا 64 (32رو امتحان نکردم)
برنامه بدون مشکل بالا میاد اما دیتا ها تو دیتا گرید ویو لود نمی شه!؟
البته من با VB.Net کار میکنم

Reza_Yarahmadi
جمعه 02 مرداد 1388, 11:12 صبح
چند وقت پیش منم همچین مشکلی داشتم. خیلی پیشنهادها شد ولی هیچ کدوم این مشکل رو برطرف نکرد(اکثر پیشنهادها توی App مشکلی نداشت ولی توی Web ...!!). آخرش مجبور شدم به جای استفاده از DataSet و DataReader از شئ SqlDataSource که یکی از اشیاء داخل ToolBox استفاده کنم. تمام دستورات جستجو رو هم برای همین شئ نوشتم. خلاصه تمام اون پیشنهادات رو کنار گذاشتم!!
برای استفاده از SqlDataSource بصورت زیر عمل کن
اول یه شئ SqlDataSource از ToolBox به صفحه ات اضافه کن
روی علامت < کنار شئ SqlDataSource کلیک کن و گزینه ... Configure data source رو انتخاب کن
تنظیمات مربوط بانک و جدول مورد نظرت و ... انجام بده و در آخر Finish
در بین خصوصیتهای گرید ، خاصیت DataSourceID رو برابر با نام شئ SqlDataSource قرار بده
برای انجام جستجو و نمایش در گرید هم میشه بصورت زیر عمل کرد:

void Fill(string SqlStr, string Param)
{
SqlDataSource1.SelectCommand = SqlStr;
SqlDataSource1.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
SqlDataSource1.SelectParameters.Clear();
SqlDataSource1.SelectParameters.Add(Param, txbSearch.Text);
SqlDataSource1.SelectParameters.Add("TelCenter", ddTelCenter.SelectedItem.Text);
SqlDataSource1.SelectParameters.Add("DslamName", ddDslamName.SelectedItem.Text);
SqlDataSource1.ConnectionString = "Data Source=(local);Initial Catalog=ISPDB;Integrated Security=True";
SqlDataSource1.DataBind();
DataGrid1.DataSourceID = "SqlDataSource1";
}

aminghaderi
جمعه 02 مرداد 1388, 14:49 عصر
با تشکر از آقای یاراحمدی .
ولی فکر می کنم این کار شدنی باشه ؟؟!!
خودم شخصا دنبال راه حل این موضوع هستم ولی از دوستان و اساتید هم ، هر کس راه حلی داشت لطفا ارائه بدهند.
با تشکر فراوان

Navid Asadi
شنبه 03 مرداد 1388, 10:05 صبح
ولی من از اکسس استفاده می کنم

Reza_Yarahmadi
شنبه 03 مرداد 1388, 12:20 عصر
ولی من از اکسس استفاده می کنم
به جای استفاده از SqlDataSource از AccessDataSource استفاده کن. مراحل آماده سازی مثل هم هستن.


ولی فکر می کنم این کار شدنی باشه ؟؟!!
اگر راه حلی پیدا کردید ما رو هم بی نصیب نذارید.

aminghaderi
جمعه 14 اسفند 1388, 08:00 صبح
چند وقت پیش این تاپیک رو زدم و الان که به تاپیک ها نگاه می کردم به چشمم خورد...
خوب این مشکل یه راه حل داره و اون اینه که به طور دستی دیتا گرید ویو رو پر کنید (اگه می خواین از ویزارد استفاده نکنید!) و به این صورته که طی یه حلقه for کل رکورد های دیتاست رو خونده و یکی یکی به دیتا گرید ویو اضافه می کنید ، نگران سربار و انجام پروسه های اضافی نباشید ، چون خود دیتا گرید رو که با جدول بانک بایندش کنید تقریبا همین کار رو انجام می ده ، پس فرق زیادی نداره :


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;


public partial class _Default : System.Web.UI.Page
{
SqlConnection cnn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter sda = new SqlDataAdapter();
DataSet ds = new DataSet();
public int total:
protected void Button1_Click(object sender, EventArgs e)
{
cnn.ConnectionString = "Data Source=AMIN-A45ADB7E50\\SQLEXPRESS;Initial Catalog=admin_university;Integrated Security=True";
cmd.CommandText = "select * from student";
cmd.Connection = cnn;
sda.SelectCommand = cmd;
cnn.Open();
sda.Fill(ds, "Box");
cnn.Close();

total = ds.Tables["Box"].Rows.Count;
for (i = 0; i < total; i++)
{
dr = ds.Tables["Box"].Rows[i];
dataGridView1.Rows.Add(dr["Field 2"].ToString(), dr["Field 1"].ToString());
}


}

{
توی رویداد پیچ لود هم بنویسید:


dataGridView1.RowHeadersWidth= 5;
dataGridView1.Columns.Add("", "Fild 1");
dataGridView1.Columns.Add("", "Fild 2");
dataGridView1.Columns[0].Width = 100;
dataGridView1.Columns[1].Width = 100;



این کد دوتا فیلد داخل گرید ویو اضافه می کنه و کد بالاتر هم میاد فیلد 1 و فیلد 2 رو از جدول دیتابیس به صورت رکورد به رکورد می خونه و داخل گرد ویو ادد می کنه به نظرم روش خوبی بیاد خصوصا زمانیکه شما تعداد رکورد زیادی دارین می تونید زمانبندی واسش طراحیه کنید تا یک دفعه اطلاعات جدول شما رو واکشی نکنه تا کاربر پشت میز خوابش ببره؟!
مزیت دیگش اینه که همه چی تو دستته و هر کاری بخوای انجام بدی می تونی .
و عیبی هم که داره کد برنامتون یکم شلوغ می شه که اون هم با استفاده از توابع قابل حله.

کد رو به صورت "شبه کد" نوشتم چون در حال حاظر همچین کدی دم دست نداشتم ، شاید خطایی املایی یا سنتکسی داشت باشه.

موفق باشید.


موفق باشید.