PDA

View Full Version : مبتدی: خواندن سطر به سطر اطلاعات database



va2012
سه شنبه 22 فروردین 1391, 22:40 عصر
سلام.

من یک برنامه دارم که در فرم اصلی با یک دیالوگ یک دیتابیس رو دریافت میکنه و درون dataGridView1 در همان فرم نمایش میده . سپس با کلیک کردن یک Button در فرم اصلی - یک Dialog Form باز میشه و یک سری اسکن رو روی اطلاعات دیتابیس انجام میده و بعد اطلاعات رو در یک dataGridView2 در فرم اصلی نمایش میده.

حالا مشکلم اینجاست که در Dialog Form که قراره اسکن انجام بشه (مثل نرم افزارهای آنتی ویروس) باید تمام اطلاعات دیتابیس رو خط به خط بخونه و یک سری اعمال روی اون ها انجام بده ولی نمی دونم با چه کدی باید این عمل انجام بدم که مستقیما اعمال روی دیتابیس انجام بشه.

اول میخواستم اطلاعات رو از dataGridView1 در فرم اصلی بگیرم ولی از داخل این فرم به فرم اصلی نمیشه دسترسی داشت.( تمام روشهای دسترسی به کنترل های فرم دیگه از داخل یک فرم رو هم استفاده کردم ولی نمیشه)

بعضی از دوستان گفتند برای خوندن اطلاعات از دیتابیس میشه از dataSet و dataReader استفاده کرد ولی نمیدونم کدش چجوریه.
دیتابیس هم اکسس هست.

از dataTable هم استفاده کردم. ولی فایده ای نداشت. این قسمتی از کد فرم اسکن هست :

//for (int i = 0; i < dataSet.Tables["Table1"].Rows.Count - 1; i++)
//{
// command.CommandText = "insert into Table1 (1,2,3,4,5) values ('" + ستون اول دیتابیس + "','" + ستون دوم دیتا بیس + "','" + ستون سوم دیتابیس + "','" + txt1.Text + "','" + txt2.Text + "')";
// command.Connection = connection;
// connection.Open();
// command.ExecuteNonQuery();
// connection.Close();
// Form6_Load(null, null);

// progressBar1.Value = progressBar1.Value + 1;
//
//}

va2012
چهارشنبه 23 فروردین 1391, 12:47 عصر
دوستان خواهشا اگه کسی می تونه راهنمایی کنه. باید سریعتر انجامش بدم. :قلب:

Sirwan Afifi
چهارشنبه 23 فروردین 1391, 12:58 عصر
به اینصورت می تونید از DaraReader استفاده کنید :


while( dr.Read() ) { System.Console.WriteLine( dr["FirstName"] ); }

va2012
چهارشنبه 23 فروردین 1391, 13:28 عصر
حقیقتش متوجه نشدم . این دستور کنسول رو چه طور میشه استفاده کرد؟ کد زیر که گذاشتم رو نگاه کنید وقتی توی فرم دیتا گرید ویو وجود داره که اطلاعات دیتابیس رو نشون میده - هر ستونش رو با این کد به جدول مجزایی انتقال میدم ولی وقتی وجود نداره چه طور باید به هر سطر و ستون دیتابیس به صورت مستقیم دسترسی داشت ؟نمیدونم منظورم رو تونستم برسونم یا نه ؟ اصلا بذار ساده تر بگم : من میخوام ابتدا یک دیتابیس رو از Dialog Form دریافت کنم و با یک حلقه For همه سطر های اون رو بخونم (و بعد از یک سری تغیرات روی اون ) نتایج رو توی یک دیتا گرید دیگه نشون بدم. همین!
حالا فقط نمیدونم اون حلقه For رو چطور باید بنویسم که مستقیما همه اطلاعات دیتابیس رو سطر به سطر دریافت کنه.

for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
textBox1.Text = dataGridView1.Rows[i].Cells[1].Value.ToString();

command.CommandText = "insert into Table1 (1,2,3,4,5,6) values ('" + dataGridView1.Rows[i].Cells[0].Value.ToString() + "','" + dataGridView1.Rows[i].Cells[1].Value.ToString() + "','" + dataGridView1.Rows[i].Cells[2].Value.ToString() + "','" + dataGridView1.Rows[i].Cells[3].Value.ToString() + "','" + txt1.Text + "','" + txt2.Text + "')";
command.Connection = connection;
connection.Open();
command.ExecuteNonQuery();
connection.Close();

Form6_Load(null, null);

progressBar1.Value = progressBar1.Value + 1;


}

سوداگر
پنج شنبه 24 فروردین 1391, 02:12 صبح
اون چیزی که شما فکر می کنید، با حلقه For انجام نمیشه بلکه با شیء DataReader است که شما اطلاعات رو به صورت سطر به سطر از پایگاه داده می خونید:

SqlDataReader reader1 = new SqlCommand(strFind, conn).ExecuteReader();
while (reader1.Read())
{
listBox1.Items.Add(Convert.ToString(reader1["نام ستون"]));
}

strFind عبارت SQL تان است و conn کانکشنی است که برای ارتباط با بانک، باز کرده اید.

va2012
پنج شنبه 24 فروردین 1391, 14:32 عصر
اون چیزی که شما فکر می کنید، با حلقه For انجام نمیشه بلکه با شیء DataReader است که شما اطلاعات رو به صورت سطر به سطر از پایگاه داده می خونید:

SqlDataReader reader1 = new SqlCommand(strFind, conn).ExecuteReader();
while (reader1.Read())
{
listBox1.Items.Add(Convert.ToString(reader1["نام ستون"]));
}

strFind عبارت SQL تان است و conn کانکشنی است که برای ارتباط با بانک، باز کرده اید.

دوست عزیز خیلی ممنون از لطفت. این دقیقا همون چیزی بود که دنبالش بودم. میدونستم باید از dataReader استفاده کنم ولی کدش رو بلد نبودم. اول با اون روشی که توضیح دادم اطلاعات رو توی یک گرید میریختم و بعد از روی ستون های اون گرید به ستون های دیتابیس دسترسی پیدا میکردم که سرعتش مسلما خیلی کم بود ولی الان با استفاده از کدی که شما نوشتین چون مستقیم اطلاعات رو از دیتابیس می خونه سرعت اسکن خیلی بالاتر رفته.

بازهم تشکر .

va2012
پنج شنبه 24 فروردین 1391, 19:04 عصر
دوستان چند تا سوال دیگه :

1- من یک Button در برنامه قرار دادم که با هر بار کلیک کردن روی اون باید یک Table با تعداد ستونهای مشخص در دیتابیس تولید بشه و از دستور زیر برای تولید Table استفاده می کنم. ولی این دستور یک نام ثابت داره که برای بار دوم که روی باتن کلیک میشه Error میده چون نام جدول تکراری هست. حالا می خوام بدونم چطور میشه این دستور رو تغییر داد و نام Table رو به یک متغیر مثل (i) وابسته کرد که هر بار که روی Button کلیک میشه این نام یک شماره تغییر کنه و برنامه Error نده؟

string strSql = @"CREATE TABLE TableName (1 Text,2 Text,3 Text,4 Text,5 Text,6 Text)";

2 - دوم اینکه چطور میشه تعداد این جداول رو از کاربر دریافت کرد؟

mojtabagm
شنبه 05 تیر 1395, 19:17 عصر
با سلام
من از sql خود ویژوال استفاده کردم و اصلا کانکشن ایجاد نکردم
اگه لطف کنید بگید که من چطور از datareader استفاده کنم