PDA

View Full Version : سوال: مشکل عجیب با خواند اطلاعات از بانک اطلاعاتی پس از آپلود سایت



behzad1367
دوشنبه 05 دی 1390, 13:20 عصر
دوستان من توی سایتم بعضی جاها از SqlDataSource استفاده کردم و بعضی جاها خودم کد نوشتم که مثلا یک لیبل رو اطلاعاتش رو از پایگاه داده بخونه و نمایش بده.روی سیستم خودم درست کار میکرد اما وقتی سایت رو آپلود کردم فقط اون صفحاتی که با SqlDataSource اطلاعات رو میخونم و نمایش میدم کار میکنن و بقیه صفحاتی که دستی نوشتم کار نمیکنه!!!

و پیغام خطای Object reference not set to an instance of an object رو میده
چی کار باید انجام بدم؟

hamid_shrk
دوشنبه 05 دی 1390, 14:47 عصر
احتمالا مقدار null تو دیتابیس داری و موقع خوندن ارور میده

behzad1367
دوشنبه 05 دی 1390, 16:41 عصر
نه داداش.اگه null باشه پس چرا وقتی از SqlDataSource استفاده میکنم مشکلی پیش نمیاد؟

hamid_shrk
دوشنبه 05 دی 1390, 16:45 عصر
داداش واسه این میگم که شاید موقع convert ارور میده ، هنگام استفاده از sqldatasource این اتفاق نمیوفته ، کدی که نوشتی بصورت دستی بخونه چیه؟ بزار تا بگم کجاش مشکل داره

behzad1367
دوشنبه 05 دی 1390, 17:04 عصر
داداش واسه این میگم که شاید موقع convert ارور میده ، هنگام استفاده از sqldatasource این اتفاق نمیوفته ، کدی که نوشتی بصورت دستی بخونه چیه؟ بزار تا بگم کجاش مشکل داره

بیا داداش:


DataAccess data0 = new DataAccess();

try
{
string query = "SELECT * FROM [About]";
DataTable table = data0.Select(query);
AboutText.Text = table.Rows[0][0].ToString();

}
catch (Exception ee)
{
AboutText.Text =ee.Message;

}

این برنامه قبلا درست بود روی سیستم خودم.حالا که آپلود کردم اینطوری شده.من فکر میکنم یه فرقی بین کانکشن استرینگ SqlDataSource و کانکشن استرینگ کلاس دیتا اکسس ختما وجود داره که روی سایت یکیش کار میکنه یکیش نه

hamid_shrk
دوشنبه 05 دی 1390, 17:17 عصر
مگه connection string تون رو چجوری گذاشتید؟؟؟
sqldatasource از روی webconfig میخونه

behzad1367
دوشنبه 05 دی 1390, 17:24 عصر
ببین داداش این کلاس dataaccess هست که ازش برای اتصال به بانک استفاده میکنم:


public class DataAccess
{
public string mes;
SqlConnection Connect = new SqlConnection();
String ConectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename='|datadirecto ry|\Database.mdf';Integrated Security=True;User Instance=True";
SqlCommand Command = new SqlCommand();
public DataAccess()
{
//
// TODO: Add constructor logic here
Connect.ConnectionString = ConectionString;
Command.Connection = Connect;
//
}

توی وب کانفیگ هم این رو گذاشتم:

<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>

hamid_shrk
دوشنبه 05 دی 1390, 17:27 عصر
برای دیتا اکسس باید از این کد استفاده کنی :

SqlConnection SqlCN = new SqlConnection(ConfigurationManager.ConnectionStrin gs["ConnectionString"].ToString());

بهتره تو کل پروژت از یک connection استفاده کنی.

behzad1367
دوشنبه 05 دی 1390, 17:41 عصر
برای دیتا اکسس باید از این کد استفاده کنی :

SqlConnection SqlCN = new SqlConnection(ConfigurationManager.ConnectionStrin gs["ConnectionString"].ToString());

بهتره تو کل پروژت از یک connection استفاده کنی.

داداش یه توضیح میدی کدی که گذاشتی واسه چیه؟

خب شما میگی از یه Connection بهتر استفاده بشه.مگه نباید هم توی وب کانفیگ و هم داخل این کلاس Connection استرینگمو بزارم؟ جفتش هم نامه دیگه

hamid_shrk
دوشنبه 05 دی 1390, 17:46 عصر
مطمئنی کدی که موقع آپلود فرستادی تو وب کانفیگ همینه؟؟؟چون این کاملا غلطه و آدرس سرور توش نیست اصلا ،بررسی کن بعد جواب بده لطفا

farhud
دوشنبه 05 دی 1390, 18:02 عصر
ببین داداش این کلاس dataaccess هست که ازش برای اتصال به بانک استفاده میکنم:


public class DataAccess
{
public string mes;
SqlConnection Connect = new SqlConnection();
String ConectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename='|datadirecto ry|\Database.mdf';Integrated Security=True;User Instance=True";
SqlCommand Command = new SqlCommand();
public DataAccess()
{
//
// TODO: Add constructor logic here
Connect.ConnectionString = ConectionString;
Command.Connection = Connect;
//
}

توی وب کانفیگ هم این رو گذاشتم:

<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>

شما باید در ConnectionString از مشخصات سروری که هاست را گرفتی استفاده کنی. این ConnectionString فقط در سیستم خودت جواب میده. :لبخندساده:

behzad1367
دوشنبه 05 دی 1390, 20:28 عصر
من هم همین کار رو کردم.این کدهایی که نوشتم اینجا از روی سیست خودم بود.ببینید من تو روت سایتم به صفحه ساده درست کردم و داخلش 2 تا لیبل گذاشتم.یکی از لیبل ها رو به روش ویزارد از پایگاه داده بهش مقدار میدم یعنی با استفاده از SqlDataSource و یکی دیگرو به روش دستی به بانک وصل میشم.خب نوی سیستم خودم که موردی نداره و هر تا لیبل مقدار میگیرن.اما روی سایت لیبلی که بهش SqlDataSource رو میدم فقط مقدار میگیره و اون یکی دیگه این پیغام رو میده:


Object reference not set to an instance of an object.

اینم کد اون صفحه ساده که البته هیچ مشکلی نداره:

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{

DataAccess data=new DataAccess();
string q = @"SELECT * FROM [Contact]";
DataTable t= data.Select(q);
Label1.Text = t.Rows[0][0].ToString();


}
catch (Exception er)
{

Response.Write(er.Message);
}

DataView view =(DataView) SqlDataSource1.Select(DataSourceSelectArguments.Em pty);

Label2.Text = view.Table.Rows[0][0].ToString();


}
}