PDA

View Full Version : سوال: خطای Object reference not set to an instance of an object.



hashemi85sep
شنبه 09 اردیبهشت 1391, 11:22 صبح
سلام
کسی میدونه این خطا مربوط به چیه ؟

hamid_shrk
شنبه 09 اردیبهشت 1391, 11:27 صبح
میشه کدتون رو هم بذارید؟و بیشتر توضیح بدید؟
تو عکس خیلی کوچیکه و معلوم نمیشه..
به هر حال اول دیتا تیبل رو چک کنید که null نباشه!!

d_derakhshani
شنبه 09 اردیبهشت 1391, 11:27 صبح
به تابع ShowSql ات نگاه کن. مقدار DataTable رو Null بر میگردونه.

hashemi85sep
شنبه 09 اردیبهشت 1391, 11:32 صبح
DataTable dt = new DataTable();
dt = Class1.ShowSQL("select * from user where user_name='" + RadTextBox2.Text + "'");
if (dt.Rows.Count > 0)
{
Label1.Visible = true;
Label1.Text = "این نام کاربری قبلا ثبت شده است";
}
else
{
int a = Class1.ExecSQL("insert into user(name,user_name,pass,email,pic,role) values ('"+RadTextBox1.Text+"','"+RadTextBox2.Text+"','"+RadTextBox3.Text+"','"+RadTextBox5.Text+"','"+RadTextBox6.Text+"')");
if (a == 1)
{
Session["user_name"] = RadTextBox2.Text;
Response.Redirect("index.aspx");
}
else
{
Label1.Visible = true;
Label1.Text = "مشکل در ثبت اطلاعات";
}
}

hashemi85sep
شنبه 09 اردیبهشت 1391, 11:33 صبح
به تابع ShowSql ات نگاه کن. مقدار DataTable رو Null بر میگردونه.
دوست عزیز
موقع TRACE کردن هم اصلا به اونجاها نمیرسه مه DATATABLE مقدارش NULL باشه یا نباشه !!!
:متفکر:

d_derakhshani
شنبه 09 اردیبهشت 1391, 12:04 عصر
دوست عزیز
موقع TRACE کردن هم اصلا به اونجاها نمیرسه مه DATATABLE مقدارش NULL باشه یا نباشه !!!
:متفکر:
عزیز جان خود کامپایلر رو خطی وایسادا که datatable رو قبلش پر کرده. و در اون خط فقط یک چیز می تونه Null باشه اونهم DataTable هست. برای امتحان خط مربوط به ShowSQL کامنت کن، برنامه ات کار خواهد کرد(که نشون میده ایراد از همین خطه)
کدهای داخل ShowSQL رو بزار.

hashemi85sep
شنبه 09 اردیبهشت 1391, 12:07 عصر
public static DataTable ShowSQL(string w)
{
try
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\;Initial Catalog=road;Integrated Security=True";
con.Open();

SqlCommand com = new SqlCommand();
com.CommandText = w;
com.Connection = con;

SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = com;

DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
catch
{
return null;
}
}

hamid_shrk
شنبه 09 اردیبهشت 1391, 12:10 عصر
همین دیگه دوست عزیز ، تو try داره یک خطا رخ میده و شما هم دارید null میفرستید!!
کد داخل try رو تریس کنید تا ببینید کجا خطا داره

d_derakhshani
شنبه 09 اردیبهشت 1391, 12:17 عصر
اینطوری کد نزن. به هیچ وجه در چنین مواردی Try/catch نزار. چون نمی تونی متوجه بشی خطا رخ داده.
اگه از try/catch استفاده می کنی حتما یک متد SaveErrorLog بنویس و خطا رو به اون پاس بده تا جزئیات رو برات log کنه.
اما از اون بهتر اصلا try/catch ننویس. بزار اگه خطایی رخ داد تو global.asax هندلش کنی و تمام جزئیات رو اونجا log کنی(تاثیر جفتشون یکیه با این تفاوت که در این حالت زحمت کمتری میکشی)
برای connection هم از using استفاده کن

hashemi85sep
شنبه 09 اردیبهشت 1391, 12:25 عصر
الان داره این خطا رو میده که تعداد فیلد ها برابر نیست :
There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.

neda555
شنبه 09 اردیبهشت 1391, 12:37 عصر
شما جایی که دارید insert میکنید یک مورد را جا انداختید اسمش هست ولی کنترلش نیست

hamid_shrk
شنبه 09 اردیبهشت 1391, 12:49 عصر
الان داره این خطا رو میده که تعداد فیلد ها برابر نیست :
There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
خوب دیگه متن خطا کاملا مشخصه که تعداد ستونهایی که برای insert مشخص کردید با تعداد مقادیر در این خط نمیخونه!!!!


insert into user(name,user_name,pass,email,pic,role) values ('"+RadTextBox1.Text+"','"+RadTextBox2.Text+"','"+ RadTextBox3.Text+"','"+RadTextBox5.Text+"','"+RadT extBox6.Text+"')"

فکر میکنم TextBox4 رو جا انداختید که طریقه نام گذاری کنترل هاتون هم اصلا درست نیست!!!