PDA

View Full Version : خواندن اطلاعات از دیتاتیبل به صورت x تایی



bftarane
سه شنبه 07 آبان 1392, 16:43 عصر
فرض کنید n تا ایمیل در جدول داریم به شکل زیر
1@yahoo.com
2@yahoo.com
3@yahoo.com
4@yahoo.com
5@yahoo.com
6@yahoo.com
7@yahoo.com
8@yahoo.com
9@yahoo.com
.
.
.
n@yahoo.com
و حالا می خواهیم به شکل زیر اینها چاپ بشن.
لطفاً راهنمایی کنید.
1@yahoo.com
2@yahoo.com
*
3@yahoo.com
4@yahoo.com
5@yahoo.com
*
6@yahoo.com
7@yahoo.com
8@yahoo.com
*
9@yahoo.com
.
.
.
n@yahoo.com

من اینجا فرض کردم 3 تا 3 تا بخواهیم ایمیلها رو نشون بدیم.
این کدها جواب دلخواه من رو نمی دن

DataTable dt = GetAllEmail(); int j = 3; try { for (int m = 0; m < dt.Rows.Count; m += j) { for (int i = m; i < m + j; i++) { Label2.Text = dt.Rows.Count.ToString() + "<br/>"; if (i<dt.Rows.Count) if ((m+j)<dt.Rows.Count) strEmail = dt.Rows[i]["Email"].ToString(); msg.To.Add(strEmail); Label1.Text += strEmail + "<br/>"; //client.Send(msg); } }
البته فعلاً کاراکتر * رو بینشون هم نشون ندادم ولی در همون مرحله 3 تا 3 تا گرفتن مشکل دارم.

البته کار اصلی که می خوام انجام بدم اینه که ایمیلها رو x تا x تا از دیتاتیبل بخونم و ایمیل بفرستم به این x تا بعد برم سراغ x تای بعدی بخونم و ایمیل بفرستم و الی آخر این کار تکرار بشه.
کاری هم که در بالا گفتم به خاطر تست این موضوع هست.

Mahmoud.Afrad
سه شنبه 07 آبان 1392, 18:32 عصر
به اینصورت اصلاح کن:

DataTable dt = new DataTable();
dt.Columns.Add("Email");

dt.Rows.Add("1@yahoo.com");
dt.Rows.Add("2@yahoo.com");
dt.Rows.Add("3@yahoo.com");
dt.Rows.Add("4@yahoo.com");
dt.Rows.Add("5@yahoo.com");
dt.Rows.Add("6@yahoo.com");
dt.Rows.Add("7@yahoo.com");
dt.Rows.Add("8@yahoo.com");

MailMessage msg = new MailMessage();
int count = 3;
//try
{
label2.Text = dt.Rows.Count.ToString();
for (int offset = 0; offset < dt.Rows.Count; offset+=count)
{
msg.To.Clear();

string tempStr = string.Empty;
int newIndex = 0;

for (int indexer = 0; indexer < count; indexer++)
{
newIndex = offset + indexer;
if (newIndex < dt.Rows.Count)
{
string strEmail = dt.Rows[newIndex]["Email"].ToString();
tempStr += strEmail + "\t";
msg.To.Add(strEmail);
}
}
listBox2.Items.Add(tempStr);
//client.Send(msg);
}
}

bftarane
چهارشنبه 08 آبان 1392, 09:09 صبح
دیروز با تعداد 8 ایمیل خودم و 2 ایمیل دیگر تست کردم (یعنی 10 تا ایمیل در دیتابیس بود) طبق انتظار 8 تا ایمیل دریافت کردم.
ولی امروز با 1 ایمیل خودم و 2 ایمیل دیگر در جدول (یعنی 3 ایمیل در جدول) تست کردم انتظار داشتم فقط یک ایمیل دریافت کنم ولی 3 تا دریافت کردم. دلیل این چیست؟ یعنی فکر می کنم داره در نظر می گیره 3 تا رکورد در جدول هست و به تعداد کل رکوردها برای یک نفر ایمیل می فرسته.

اومدم count رو گذاشتم 5 دیدم 5 تا فرستاده به یه نفر.
با count=2، دو تا ایمیل فرستاده شد بهم.
ولی جالب اینجاست که در لیست باکس بهم درست نشون می ده نتیجه رو. یعنی مثلاً اگه count رو گذاشتم 2 شکل زیر در لیست باکس بهم نشون داده میشه
* 10@yahoo.com
*100@yahoo.com
خودم اون ستاره ها رو گذاشتم برای اینکه بفهمم چند تا چند تا می خونه.

لطفاً راهنمایی کنید.
اینم کدها برای اینکه بدونید اون(client.send(msg رو کجا گذاشتم.

DataTable dt = GetAllEmail();

int count = 2;
//try
{
l.Text = dt.Rows.Count.ToString();
for (int offset = 0; offset < dt.Rows.Count; offset += count)
{
msg.To.Clear();

string tempStr = string.Empty;
int newIndex = 0;

for (int indexer = 0; indexer < count; indexer++)
{
newIndex = offset + indexer;
if (newIndex < dt.Rows.Count)
{
string strEmail = dt.Rows[newIndex]["Email"].ToString();
tempStr += strEmail + "\t";
msg.To.Add(strEmail);


client.Send(msg);
}
}
listBox2.Items.Add(tempStr + "*");

}
}

Mahmoud.Afrad
چهارشنبه 08 آبان 1392, 15:52 عصر
اشتباه از جای client.Send(msg); هست. اول باید ایمیل ها به To اضافه بشن بعد خارج حلقه داخلی ارسال انجام بشه.

bftarane
چهارشنبه 08 آبان 1392, 21:17 عصر
نمی دونم بیرون هم که می زارم نتیجه دلخواه رو نمی گیرم موقع ارسال ایمیل.
از اون که بگذریم همین الآن با 6 تا ایمیل در جدول و Count برابر 2 سه بار تست کردم هر 3 بار نتیجه متفاوت بود Spam هم نشده بود موندم جریان چیه؟

برای 5 تا ایمیل جواب دلخواه داد ولی برای 2 تا و 3 تا هم تست کردم نتیجه دلخواه نبود.
حالا Trace می کنم شاید بتونم مشکل رو بفهمم. ممنون.