PDA

View Full Version : سوال: خطای There is no row at position 0



saba664
یک شنبه 10 دی 1396, 09:52 صبح
سلام من بعد از نوشتن که فعال و غیرفعاله داخل لود فرم اصلیم با این خطا مواجه شدم علتش چیه؟:ناراحت:

Mahmoud Zaad
یک شنبه 10 دی 1396, 10:05 صبح
سلام
دلیلش اینه که کوئری شما نتیجه ای نداشته و سطر 0 خالی هست.

saba664
یک شنبه 10 دی 1396, 10:18 صبح
سلام
دلیلش اینه که کوئری شما نتیجه ای نداشته و سطر 0 خالی هست.

متوجه منظورتون نشدم

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


User U = new User();
U.LoadAccess(Functions.UserName);
m1_sabt.Enabled = U.Access_sabt ;
m2_savabegh.Enabled = U.Access_savabegh ;
m3_gozaresh.Enabled = U.Access_gozaresh ;
m4_jostejo.Enabled = U.Access_jostejo ;
m5_backup.Enabled = U.Access_backup ;
m6_adduser.Enabled = m7_changeuser.Enabled = m8_deleteuser.Enabled = U.Access_Users;

Mahmoud Zaad
یک شنبه 10 دی 1396, 10:21 صبح
ببینید این خطا معنیش اینه که دیتاتیبل شما خالیه یعنی توی سطر 0 هیچ اطلاعاتی وجود نداره. دیتاتیبل شما هم که از کوئری پر میشه بنابراین سلکتی که شما زدید هیچ سطر رو پیدا نکرده. شما الان همین کوئری رو تو خود sql server managment studio اجرا کنید ببینید چیزی پیدا میکنه یا نه.

saba664
یک شنبه 10 دی 1396, 10:57 صبح
ببینید این خطا معنیش اینه که دیتاتیبل شما خالیه یعنی توی سطر 0 هیچ اطلاعاتی وجود نداره. دیتاتیبل شما هم که از کوئری پر میشه بنابراین سلکتی که شما زدید هیچ سطر رو پیدا نکرده. شما الان همین کوئری رو تو خود sql server managment studio اجرا کنید ببینید چیزی پیدا میکنه یا نه.

خب من کد رو به ی مرحله عقب تر بردم این کد منه کاربر ثبت میشه حالا اگه بخوام این کاربر با سطح دسترسی من اعمال بشه باید چه کدی بزنم؟ خودم ی کد زدم خطا بالا رو داد ولی الان اون کد رو حالت توضیحات دراوردم که شماها کمکم کنین

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace final_doctor
{
public partial class login : Form
{
public login()
{
InitializeComponent();

DataBase_SQL.Server = "";
DataBase_SQL.DataBaseName = "finaldoctor";
}

private void button1_Click(object sender, EventArgs e)
{
// mainform m = new mainform();

//m.Show();

//---------------------------
if (txt_Pass.Text == "")
{
MessageBox.Show("لطفا رمز عبور را وارد نمایید", "رمز عبور", MessageBoxButtons.OK, MessageBoxIcon.Stop);
txt_Pass.Text = "";
txt_Pass.Focus();
return;
}
//---------------------------
User U = new User();
try
{
U.UserName = txt_UserName.SelectedValue.ToString();
U.Password = txt_Pass.Text ;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "اطلاعات نادرست", MessageBoxButtons.OK, MessageBoxIcon.Stop);
return;
}
if (!U.IsCorrectUser())
{
MessageBox.Show("رمز عبور اشتباه است", "رمز عبور", MessageBoxButtons.OK, MessageBoxIcon.Stop);
txt_Pass.Text = "";
txt_Pass.Focus();
return;
}
else
{
this.Hide();
mainform Form = new mainform ();
Functions.UserName = U.UserName;

this.Hide();
Form.Show();
}
}

private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}

private void login_Load(object sender, EventArgs e)
{
User U = new User();

U.ShowUsers(txt_UserName);
if (txt_UserName.Items.Count == 0)
{
MessageBox.Show("تا کنون هیچ کاربری ایجاد نشده است", "کاربر سیستم", MessageBoxButtons.OK);
Application.Exit();

}
}





private void txtname_TextChanged(object sender, EventArgs e)
{

}
}

}

این کد بالا مربوط به کد لاگین منه که به درستی کاربر رو اضافه میکنه چندتا کاربر اضافه کردم و داخل sql دیدم که ثبت شدن

saba664
یک شنبه 10 دی 1396, 10:59 صبح
147381 ثبت میشه ولی اعمال نمیشه

Mahmoud Zaad
یک شنبه 10 دی 1396, 11:06 صبح
شاید مشکل از کانکشن استرینگ باشه، دیتابیس رو از توی خود ویژوال استودیو ساختید؟ اگر اینطور باشه معمولا دو تا دیتابیس ایجاد میشه که یکیش هر بار که برنامه رو اجرا میکنید پاک میشه.

saba664
یک شنبه 10 دی 1396, 12:44 عصر
شاید مشکل از کانکشن استرینگ باشه، دیتابیس رو از توی خود ویژوال استودیو ساختید؟ اگر اینطور باشه معمولا دو تا دیتابیس ایجاد میشه که یکیش هر بار که برنامه رو اجرا میکنید پاک میشه.

خب یعنی اگه جدول داخل sql که خودم ساختم رو پاک کنم با کدهایی که داخل کلاس دیتابیس ساختم برام جدول میسازه؟

Mahmoud Zaad
یک شنبه 10 دی 1396, 13:03 عصر
نه، منظورم اینه که شما دیتابیس رو از طریق Server Explorer داخل ویژوال استودیو ساختید یا از طریق برنامه Sql Server Management Studio؟
به یه روش دیگه میشه امتحان کرد، شما یه گرید روی فرم قرار بدید بعد اطلاعات رو Insert کنید بعد توی گرید نمایش بدید. در لود فرم هم کدهای مربوط به پر کردن گرید رو بنویسد تا در لود فرم هم گرید پر بشه. حالا برنامه رو ببندید و مجدداً باز کنید ببینید اطلاعات توی گرید هست یا نه؟ اگر نباشه مشکل از کانکشن استرینگه و اگه باشه مشکل جای دیگه است. یعنی توی متد LoadAccess به جای اینکه اطلاعات رو توی متغیرها قرار بدید در گرید قرار بدید. فعلا اینو امتحان کنید.

saba664
دوشنبه 11 دی 1396, 09:56 صبح
خب من مشکلم حل شد ولی می خوام علت این مشکل رو بگم شاید کسی مثل من به این مشکل برخورد کنه

اشکال و ایراد این خطا و رفع اون فقط برای این بود که توکلاس user بعد از ["Access_sabt"] باید یه دونه Tostring() می ذاشتم یعنی اون قطعه کدی که خطا می گرفت به این شکل تغییر باید بکنه


Access_sabt = Convert.ToBoolean(DT.Rows[0]["Access_sabt"].ToString());


برای تمام فیلدهایی که تو این قسمت با این کد نوشتیم باید به اخر همه اشون یه دونه To string() اضافه میشد