با سلام و تبریک سال نو
چه طور در داخل یک تکست باکس ، هر خط تکست باکس را در داخل دیتا بیس در یک ردیف ذخیره کند
مثلا من در یک تکست باکس سه خط اطلاعات نوشتم می خوام هر خط اطلاعات در یک ردیف در دیتا بیس ذخیره شود
لطفا راهنمایی کنی
در SQL SERVER
2005
با سلام و تبریک سال نو
چه طور در داخل یک تکست باکس ، هر خط تکست باکس را در داخل دیتا بیس در یک ردیف ذخیره کند
مثلا من در یک تکست باکس سه خط اطلاعات نوشتم می خوام هر خط اطلاعات در یک ردیف در دیتا بیس ذخیره شود
لطفا راهنمایی کنی
در SQL SERVER
2005
سلام.
برای اینکار شما می تونید با کلاس StringReader، متود ReadLine، خط به خط نوشته ها رو از TextBox بگیرید، و سپس، اونها رو بعنوان پارامترهای یک Stored Procedure به SQL Server بدید و SP مزبور هم داده ها رو ذخیره کنه. روش دیگه این هستش که با توابع String-Related موجود در SQL Server، داده ها رو خط به خط در SP مزبور جدا کنید (جای استفاده از String Reader)، و همونجا همه رو ذخیره کنید. روش دیگه اینه که داده ها رو با StringReader خط به خط جدا کنید، یه XML بسازید، XML رو بعنوان پارامتر به SP بدید تا SP همه رو اونجا به یک Command ذخیره کنه. من دقیقا متوجه نیازتون نمیشم، اما قاعدتا هر کدوم از این روشهایی که توضیح دادم، میتونه راهگشای شما باشه.
موفق باشید.
سلام ،
آقاي موسوي من فكر ميكنم مشكلشون چيزه ديگه اي بوده باشه .
شايد ايشون ميخوان وقتي متني رو در Textarea درج ميكنند چند خطي هست و وقتي اون رو در ديتابيس ذخيره ميكنند Enter ها ذخيره نميشه . بنابراين هنگام بازيابي و انتصاب دادن از ديتابيس به كنترلها عملا Enter ها از بين رفته و همه رو دريك خط نشون ميده .
من در اين موارد \r\n رو با <br /> جايگزين ميكنم ، مثلا :
p.EnDescription = txtEnDescribtion.Text.Replace("\r\n", "<br />");
ببینید دوستان گلم
من در صفحه ای از سایتم 3 تا text box دارم و می توان اطلاعات هر 3 را در دیتا بیس ذخیره کنم .
حالا من می خوام تکست باکس دومی زمانی که داخلش تایپ می شه در هر خط آن می خوام فقط 11 کاراکتر تایپ بشه
و زمانی که اینتر زدم در خط بعد هم همینطور
حالا می خوام هر خط را در دیتابیس با تکست باکس های دیگر در یک row در دیتا بیس ذخیره کنم
به فرض مثال در تکست باک اول "site"
در تکس باکس دوم نوشته شده در هر خط
"12"
"13"
"14"
"15"
و در تکس باکس سوم نوشته شده "iran"
حالا زمانی که من کلید ثبت اطلاعات را زدم به این صورت در دیتابیس ذخیره شود
site 12 iran
site 13 iran
site 14 iran
site 15 iran
لطفا اگر میتوانید به صورت مثال توضیح دهید
string txt1 = textBox1.Text;
string [] txt2 = (textBox2.Text).Split('\n');
string txt3 = textBox3.Text;
StringBuilder sb = new StringBuilder();
foreach (string str1 in txt2)
{
sb.Append(txt1)
.Append(' ')
.Append(str1)
.Append(' ')
.Append(txt3);
MyDBInsertMethod(sb.ToString());
sb.Clear();
}
دوست عزیز ممنون
اگر در مورد این قسمت توضیح دهید خیلی کمک کردید
StringBuilder sb = new StringBuilder();
foreach (string str1 in txt2)
{
sb.Append(txt1)
.Append(' ')
.Append(str1)
.Append(' ')
.Append(txt3);
MyDBInsertMethod(sb.ToString());
sb.Clear();
منظور از این ها چیست :
StringBuilder
MyDBInsertMethod
foreach
سلام دوسته من
من این دوتا رو میدونم چیه
StringBuilder که یک کلاس برای کار با رشته هاست
بصورت کلی در حالتیکه اعمال تغییرات زیاد روی رشته ها نیاز باشد بهتر است آبجکتی از کلاس StringBuilder ساخته و با خاصیت Append آن کار کنیم
دستوره froeach برای حرکت بر روی Collectionها مناسب است
For Each ctl As Control In Me.Controls
If TypeOf ctl Is TextBox Then
ctl.Text = "Hi Vb"
End If
Next
مثلا این قطعه کد که به textbox موجود روی فرم یک مقدار اضافه میکنه
دوست عزیز کدی که من برای ثبت اطلاعاتم د دیتا بیس استفاده کردم به صورت زیر است
protected void Button1_Click(object sender, EventArgs e)
{
try
{
string conString = ConfigurationManager.ConnectionStrings["ASPNETDB_ConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(conString);
SqlCommand cmd = con.CreateCommand();
try
{
con.Open();
cmd.CommandText = "INSERT INTO s_user (fullname, username, gender) VALUES (@Value1, @Value2, @Value3)";
cmd.Parameters.Add("@Value1", SqlDbType.NVarChar).Value = TextBox1.Text;
cmd.Parameters.Add("@Value2", SqlDbType.NVarChar).Value = TextBox2.Text;
cmd.Parameters.Add("@Value3", SqlDbType.NVarChar).Value = TextBox3.Text;
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
label_Message.Text = ex.Message;
}
finally
{
con.Close();
}
}
catch (Exception exc)
{
label_Message.Text = exc.Message;
}
}
حالا کد شما را در کجای این قرار بدم
تشکر می کنم اگر زودتر جواب بنده را بدید
کارم گیر است
آقا من منتظرم
از اساتید محترم تقاضا دارم این مشکل بنده را حل کنند
من در پست چارم به طور کامل توضیح دادم چه کار میخوام بکنم
با راهنمایی یکی از دوستان که گفتند هر خط تکست باکس را باید در ارایه قرارداد
حالا باید این ارایه را در کدی که من برای ثبت اطلاعاتم استفاده میکنم چه طور اضافه کنم
string[] lines=Textbox1.Text.Split(new char[]{'\n'});
for(int i=0;i<lines.length;i++)
{
// insert into db
}
من اینطوری درج کردم ولی نشد
protected void Button1_Click(object sender, EventArgs e)
{
try
{
string[] lines = TextBox2.Text.Split(new char[] { '\n' });
string conString = ConfigurationManager.ConnectionStrings["ASPNETDB_ConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(conString);
SqlCommand cmd = con.CreateCommand();
try
{
con.Open();
for (int i = 0; i < lines.Length; i++)
{
cmd.CommandText = "INSERT INTO s_user (fullname, username, gender) VALUES (@Value1, @Value2, @Value3)";
cmd.Parameters.Add("@Value1", SqlDbType.NVarChar).Value = TextBox1.Text;
cmd.Parameters.Add("@Value2", SqlDbType.NVarChar).Value = lines;
cmd.Parameters.Add("@Value3", SqlDbType.NVarChar).Value = TextBox3.Text;
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
label_Message.Text = ex.Message;
}
finally
{
con.Close();
}
}
catch (Exception exc)
{
label_Message.Text = exc.Message;
}
در ضمن من در این خط جای lines را نیز textbox2.text قرار دادم ولی نشد
cmd.Parameters.Add("@Value2", SqlDbType.NVarChar).Value =textbox2.text ;
من نمی دونم از ارایه چه طور استفاده کنم
این دو ارور زیر را نیز موقعی که کلید ثبت را میزنیم می دهد
زمانی که در خط 16 نوشته شود lines
Failed to convert parameter value from a String[] to a String.
این ارور را نیز زمانی که در همان خط نوشته شود textbox2.text
The variable name '@Value1' has already been declared. Variable names must be unique within a query batch or stored procedure.
از اقا بهروز و بقیه اساتید تقاضا دارم این مشکل بنده را حل بکنند
سلام.
آخه اصلا همچین نیازی از بیخ و بن اشکال داره. کاملا روشن هستش که UI ای که در نظر گرفته اید، مناسب اینکار نیست. چه اتفاقی باید بیفته اگه تو TextBox دوم، سه ردیف زده بشه ولی تو TextBox سوم، 5 ردیف؟؟؟ اینجا چظور می خواهید اطلاعات ذخیره بشه؟
به اعتقاد من باید UI اتون رو تغییر بدید و چیز مناسبی درست کنید. میشه دقیق بفرمایید این اطلاعات چی هستن تا بتونم بهتر بهتون کمک کنم؟ منظورم TextBox دوم و سوم، چه اطلاعاتی رو در خودشون نگهداری میکنن؟
موفق باشید.
خوی شما یک UI پیشنهاد بدید
ببین دوست من ، اولاً سوالت کاملاً نامفهومه انتظار نداشته باش جواب خوبی بگیری.
دوماً شما با بعضی مفاهیم پایه ای مشکل داری (مثل آرایه) و حالا فرضاً این مشکلت حل شد یکی دیگه درست میشه.
بنظر من شما باید یه کتاب خوب بذاری جلوت و حداقل این مفاهیم پایه ای رو با دقت بخونی.
برای این مشکلت هم یه تصویر از صفحت و یه تصویر از جدول دیتابیست بذاری میتونیم کمکت کنیم.
-----------------------------------------------------------------
بازار مرزی ایرانیان :: تجربه یک خرید ارزان و با کیفیت
آخرین ویرایش به وسیله mohammad.sakhidel : دوشنبه 22 فروردین 1390 در 19:49 عصر
سلام.
می دونید مشکل چیه؟ در واقع مشکل اینه که سوال اصلی رو پنهان می کنید و بدنبال پاسخ به سوالی هستید که فکر می کنید راه گشای شماست. با این توضیحی که در پیام خصوصی به من دادید، شما یک TextBox دارید که توش متن پیام رو وارد می کنید و TextBox ای دارید که شماره تلفن ها رو خط به خط وارد می کنید. حالا نیاز دارید هر خطر از اون TextBox به شماره ای که در خط متناظر در TextBox دیگه ای هست، در بانک نگهداری بشه. درسته؟
برای اینکار می تونید شماره ها /خطوط پیام رو همونطوری که قبلا هم گفتم خط به خط جدا کنید (با StringReader، Regular Expression، Split و ...) بعبارت دیگه:
Debug.Assert(!string.IsNullOrEmpty(this.txtNumbers .Text));
Debug.Assert(!string.IsNullOrEmpty(this.txtMessage s.Text));
List<KeyValuePair<string/*phoneNr*/, string/*message*/>> list = new List<KeyValuePair<string, string>>();
using (StringReader reader = new StringReader(this.txtNumbers.Text))
{
string phoneNr = null;
while ((phoneNr = reader.ReadLine()) != null)
list.Add(new KeyValuePair<string, string>(phoneNr, null));
}
int index = -1;
using (StringReader reader = new StringReader(this.txtMessages.Text))
{
string message = null;
while ((message = reader.ReadLine()) != null && (++index) < list.Count)
list[index] = new KeyValuePair<string, string>(list[index].Key, message);
}
بدین ترتیب، یک list داریم از زوج مرتبهای "شماره تلفن" و "پیام"... حالا باید توی یک حلقه، اینها رو به Stored Procedure خودمون بفرستیم. یا دونه به دونه رکوردها رو Insert کنیم، یا همه رو بصورت یک XML بفرستیم به SP، اونجا یک ضرب همه رو Insert کنیم:
foreach (KeyValuePair<string, string> item in list)
{
string phoneNr = item.Key, message = item.Value;
//Open the connection to the underlying database
//Create a new command
//Populate the Parameters collection of the command using (phoneNr, message) pair...
//Execute the command
}
من این بخش رو دیگه کدی براش ننوشتم، خودتون می تونید از پسش بر بیایید. فقط براتون یکسری Comment نوشتم که بدونید چی کار باید کنید.
موفق باشید.
پاورقی: ببینید. من اینجام تا سر نخها رو به برنامه نویسها بدم، نه اینکه بشینم براشون کد بنویسم. نوشتن این پیام از من 20 دقیقه وقت برد، اگر وقت برای شما ارزشمنده، برای من هم هست. لطفا از این پس سوالاتتون رو از همون ابتدا واضح و روشن مطرح کنید تا از همون ابتدا پاسخ صحیح و روشنی هم دریافت کنید. در مورد UI هم، خوب چرا از چندین TextBox استفاده نمیکنید؟ چه دلیلی داره شماره ها و پیامها رو بصورت Bulk به برنامه بدید تا برنامه بخواد با این همه تلاش اونها رو Extract کنه و ...؟ تازه دقت کنید که کد فوق، هیچگونه Checking ای نداره، اینکه تعداد خطوط TextBox پیامها و شماره ها یکی باشه، Trim بشه که یه موقع خالی رد نشده باشه و و و ... اینها رو هم خودتون باید به کد اضافه کنید. اما من اسکلت اصلی رو براتون نوشتم. امیدوارم اینبار بتونید مشکلتون رو حل کنید.