PDA

View Full Version : سوال: مشکل در استفاده از شئ گرایی در چهار عمل اصلی روی دیتابیس



zarij70
سه شنبه 08 خرداد 1397, 22:20 عصر
سلام با استفاده از کلاس ها در سی شارپ دارم تمرین میکنم برای 4 عمل اصلی ینی همون ثبت و ویرایش و جستجو و حذف
برای قسمت جستجو من بخاطر استفاده از کلاس یکم گیج شدم نمیدونم کجای کدم مشکل داره

قسمت کلاس:


public Book Select(int Id)
{
// ToDo: select code goes here
Book book = new Book();
command.CommandText = "Select * from Book where ID=@ID";
command.Parameters.AddWithValue("ID", book.Id);
connection.Open();
reader = command.ExecuteReader();
if (reader.Read())
{
book.Id = Convert.ToInt32(reader["ID"].ToString());
book.BookAuthor = reader["BookAuthor"].ToString();
book.BookTitle = reader["BookTitle"].ToString();
book.Price = Convert.ToInt32(reader["Price"].ToString());
book.PublishYear = Convert.ToInt32(reader["PublishYear"].ToString());

}
connection.Close();
reader.Close();
return Id;
}

که این متغیر ها و کانکشن رو در قسمت کامپوننتهای کلی نوشتم.

و قسمت فرم:


private void searchButton_Click_1(object sender, EventArgs e)
{
BookAdapter bookadapter = new BookAdapter();
Book selectBook = new Book ();
idTextBox.Text = selectBook.Id.ToString();
authorTextBox.Text = selectBook.BookAuthor;
titleTextBox.Text = selectBook.BookTitle;
publishYearTextBox.Text = selectBook.PublishYear.ToString();
priceTextBox.Text = selectBook.Price.ToString();
bookadapter.Get(selectBook);
MessageBox.Show("اطلاعات مورد نظر پیدا شد");
}

خواستم بدونم کجاش مشکل داره
ینی میدونم تقریبا میگه نمیتونم کلاس رو به int تبدیل کنم ولی نمیدونم باید چجور حلش کنم....

danialafshari
سه شنبه 08 خرداد 1397, 23:31 عصر
با سلام
لطفاً برای قرار دادن کد در سایت از تگ C#‎‎‎‎ استفاده کنید و قوانین نامگذاری عنوان تاپیک رو مطالعه کنید چون عنوان تاپیک نامربوط با سوالتون هست
کدتون مشکل داره
مشکل کد رو میشه برطرف کرد ولی دلیل و فلسفشو متوجه نمیشید و اونی که نوشتید کلاس هست، کلاس نیست و در اصل متد هست
مبحث توابع بازگشتی رو مطالعه فرمائید تا متوجه بشید چرا خطای int میدهد
شما دارید کلاس رو به عنوان Type تعریف میکنید و id رو که از نوع int هست بهش return میکنید
میتونید از کد زیر برای جستجو الگو برداری کنید و طبق برنامتون شخصی سازیش کنید و متوجه اشتباهات کدتون بشید

private void Select(int id)
{
SqlConnection Connection = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=dbTest;Integrated Security=true;");
SqlCommand Command = new SqlCommand();
Command.Connection = Connection;
Command.CommandText = "Select * From Persons Where (ID = @ID)";
Command.Parameters.AddWithValue("@ID", id);
DataTable dt = new DataTable();
Connection.Open();
SqlDataReader dr = Command.ExecuteReader();
dt.Load(dr);
Connection.Close();
dataGridView1.DataSource = dt;
}



private void button1_Click(object sender, EventArgs e)
{
Select(Convert.ToInt32(txtID.Text));
}

میشه جوره دیگه هم نوشت یا از DataAdapter استفاده کرد و یا حتی id رو در کوئری قرار داد ولی برای درک بهتر و نزدیک به کد خودتون، همه اجزا رو در همین متد تعریف کردم هر چند که بهتره Connection و DataTable در جنرال و کلاس تعریف کرد
موفق باشید

Mahmoud.Afrad
سه شنبه 08 خرداد 1397, 23:47 عصر
public Book Select(int Id)
{
//...
command.Parameters.AddWithValue("ID", Id); // <====
//...
return book; // <=====
}
کد داخل فرم هم مشکل داره که باید دید کلاس BookAdapter به چه صورت پیاده شده.

رامین مرادی
چهارشنبه 09 خرداد 1397, 09:30 صبح
سلام با استفاده از کلاس ها در سی شارپ دارم تمرین میکنم برای 4 عمل اصلی ینی همون ثبت و ویرایش و جستجو و حذف
برای قسمت جستجو من بخاطر استفاده از کلاس یکم گیج شدم نمیدونم کجای کدم مشکل داره

قسمت کلاس:


public Book Select(int Id)
{
// ToDo: select code goes here
Book book = new Book();
command.CommandText = "Select * from Book where ID=@ID";
command.Parameters.AddWithValue("ID", book.Id);
connection.Open();
reader = command.ExecuteReader();
if (reader.Read())
{
book.Id = Convert.ToInt32(reader["ID"].ToString());
book.BookAuthor = reader["BookAuthor"].ToString();
book.BookTitle = reader["BookTitle"].ToString();
book.Price = Convert.ToInt32(reader["Price"].ToString());
book.PublishYear = Convert.ToInt32(reader["PublishYear"].ToString());

}
connection.Close();
reader.Close();
return Id;
}

که این متغیر ها و کانکشن رو در قسمت کامپوننتهای کلی نوشتم.

و قسمت فرم:


private void searchButton_Click_1(object sender, EventArgs e)
{
BookAdapter bookadapter = new BookAdapter();
Book selectBook = new Book ();
idTextBox.Text = selectBook.Id.ToString();
authorTextBox.Text = selectBook.BookAuthor;
titleTextBox.Text = selectBook.BookTitle;
publishYearTextBox.Text = selectBook.PublishYear.ToString();
priceTextBox.Text = selectBook.Price.ToString();
bookadapter.Get(selectBook);
MessageBox.Show("اطلاعات مورد نظر پیدا شد");
}

خواستم بدونم کجاش مشکل داره
ینی میدونم تقریبا میگه نمیتونم کلاس رو به int تبدیل کنم ولی نمیدونم باید چجور حلش کنم....

شما خروجی تابعتون از نوع کلاس book هست چرا خروجیش رو آیدی برمیگردونید؟!! این Id کجا تعریف شده!!