PDA

View Full Version : سوال: مشکل در گرفتن اطلاعات از دیتابیس



amir-aa
جمعه 26 خرداد 1391, 10:20 صبح
سلام من وقتی میخوام اطلاعات از دیتا بیس بگیرم مینویسه
index out of range

مقادیرم منفی نیستند و حدود 4یا 5 رقمی هستند
اینم کدم


string query3 = "select * from tbl_userinfo where [username]='" + TextBox2.Text + "'";
OleDbCommand cm3 = new OleDbCommand(query3, conn);
OleDbDataReader dr3 = cm3.ExecuteReader();
Label13.Text = dr3["vvv"].ToString();


رو خط آخر ارور میده

fakhravari
جمعه 26 خرداد 1391, 10:34 صبح
protected void Button1_Click(object sender, EventArgs e)
{
string connectionstring2 = "provider=Microsoft.Jet.OLeDB.4.0;Data Source=" + Server.MapPath("Database2.mdb");
OleDbConnection conn2 = new OleDbConnection(connectionstring2);
string query1 = "SELECT TOP 2 * FROM Table1 where sex=false ORDER BY Rnd(ID)";
OleDbCommand cm1 = new OleDbCommand(query1, conn2);
conn2.Open();
OleDbDataReader dr1 = cm1.ExecuteReader();
GridView1.DataSource = dr1;
GridView1.DataBind();
conn2.Close();


Label13.Text = dr1["vvv"].ToString();
}

mehdi-ghafari
جمعه 26 خرداد 1391, 12:19 عصر
فیلد vvv تو جدولتون هست؟

mehdi-ghafari
جمعه 26 خرداد 1391, 13:46 عصر
شما اتصال کانکشن رو باز کردید؟
con.open

amir-aa
شنبه 27 خرداد 1391, 11:47 صبح
یک مشکل جدید




string connectionstring = "provider=Microsoft.Jet.OLeDB.4.0;Data Source=" + Server.MapPath("dbsite.mdb");



OleDbConnection conn = new OleDbConnection(connectionstring);
string query = "select * from tbl_jayeze where (not EXISTS (select * from tbl_jayeze where [mojud] = 0))";
OleDbCommand cm = new OleDbCommand(query, conn);
conn.Open();
OleDbDataReader dr = cm.ExecuteReader();

if (dr.Read())
{


string connectionstring2 = "provider=Microsoft.Jet.OLeDB.4.0;Data Source=" + Server.MapPath("dbsite.mdb");
OleDbConnection conn2 = new OleDbConnection(connectionstring2);
string query1 = "select top 1 * from tbl_jayeze where pish='False' ORDER BY Rnd(id)";
OleDbCommand cm1 = new OleDbCommand(query1, conn2);
conn2.Open();
OleDbDataReader dr1 = cm1.ExecuteReader();
if (dr1.Read())
{
Label1.Text = dr1["name"].ToString();
Label7.Text = dr1["cost"].ToString();


}
conn2.Close();





چرا این کد کار نمیکنه یعنی هیچ مقداری به label1,label7نمیده

چرا؟؟؟

alonemm
شنبه 27 خرداد 1391, 12:04 عصر
باسلام:

برسی کنید که فیلد Name و cost مقدار Null نداشته باشه و برای اینکه اطمینان داشته باشید کوئری شما حداقل 1 ردیف یا بیشتر در واکشی داده دارد از خصوصیت HasRows از شی OleDbDataReader استفاده کنید.

(این خصوصیت در صورتی که جواب کوئری شما یک رکورد یا بشتر داشته باشد مقدار True و در غیر اینصورت False برمیگردونه.)


موفق باشید.

amir-aa
شنبه 27 خرداد 1391, 12:22 عصر
نه nullنیست اصلا موقع تشکیل رکورد تنظیم کردم مقدارشو 1 بده.
از has rowsهم استفاده کردم اما مسلما نمیتونه کارساز باشه و نبود
من اینو اضافه کردم اما اصلا کار نکرد


if (dr.HasRows)
{
TextBox6.Text = "t";
}
else
{
TextBox6.Text = "f";
}

amir-aa
شنبه 27 خرداد 1391, 12:41 عصر
ببینید هیچ مقداری حتی توی trace هم نشون نمیده.برنمیگردونه.مقدار رو دریافت میکنه اما بر نمیگردونه

amir-aa
شنبه 27 خرداد 1391, 13:54 عصر
چرا ج نمیدید؟؟

alonemm
شنبه 27 خرداد 1391, 14:40 عصر
دوست عزیز اگر مقدار خصوصیت HasRows برابر با False هست به این معنا هست که کوئری شما جوابی نداشته و هیچ رکوردی واکشی نشده.

تذکر: متن کوئری رو در پایگاه داده اجرا کنید و اطمینان حاصل کنید که این کوئری جواب دارد.
این عملیات رو در هر دو کوئری بالا انجام بدید.



موفق باشید.

amir-aa
شنبه 27 خرداد 1391, 15:45 عصر
جواب میداد آخه ببینید اصلا توی trace هم بگیرید کوری کار میکنه و اطلاعات رو میگیره.این برنامه نویسیه که مشکل داره!!

alonemm
شنبه 27 خرداد 1391, 16:02 عصر
اگر از این که کوئری به درستی کار میکند اطمینان دارید برای کدنویسی به متد زیر دقت کنید:


public void ReadMyData(string myConnString) {
string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";
OleDbConnection myConnection = new OleDbConnection(myConnString);
OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);
myConnection.Open();
OleDbDataReader myReader;
myReader = myCommand.ExecuteReader();
// Always call Read before accessing data.
while (myReader.Read()) {
Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));
}
// always call Close when done reading.
myReader.Close();
// Close the connection when done with it.
myConnection.Close();
}