در این مقاله با هم به سراغ آموزش چگونگی وارد کردن و ذخیره کردن DataTable در جداول SQL Server با استفاده از سی شارپ خواهیم رفت. مراحل قدم به قدم همراه با سری کامل کد ها قرار داده شده است. همچنین برای درک بهتر سورس آن نیز در انتها برای دانلود قرار داده شده است. امیدوارم از آن استفاده کنید. با من همراه باشید .
ذخیره کردن DataTable
برای این کار جدول مورد نظر کاربر باید در SQL Server ساخته شود و همچنین باید شکل و شمایل مشابه DataTable ای که میخواهیم به Stored Procedure پاس دهیم داشته باشد.
دیتابیس
من یک جدول ساده با نام Customers ساخته ام که در زیر نیز نمایش داده شده است:
سپس مشخصه ی جدول کاربری را در SQL Server با استفاده از query زیر ایجاد میکنم.
CREATETYPE[dbo].[CustomerType]ASTABLE( [Id][int]NULL, [Name][varchar](100)NULL, [Country][varchar](50)NULL ) GO
پس از ایجاد آن میتوانیم آن را در قسمت Object Explorer مشاهده کنیم. همانند زیر :
در نهایت نیز Stored Procedure زیر را بوجود می آوریم که DataTable را به عنوان پارامتر میپذیرد و سپس همه ی موارد را در جدول وارد میکند.
CREATEPROCEDURE[dbo].[Insert_Customers] @tblCustomersCustomerTypeREADONLY AS BEGIN SETNOCOUNTON; INSERTINTOCustomers(CustomerId,Name,Country) SELECTId,Name,CountryFROM@tblCustomers END
نکته : SQL مورد نیاز برای ایجاد دیتابیس در سورس قرار داده شده برای دانلود ارائه شده است.
HTML
HTML مربوط به این بخش شامل یک ASP.NET GridView به همراه CheckBox برای انتخاب ردیف ها و یک دکمه برای انتقال داده ها از GridView به جدول دیتابیس SQL Server.
<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="false"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:CheckBoxID="CheckBox1"runat="server"/> </ItemTemplate> </asp:TemplateField> <asp:BoundFieldDataField="Id"HeaderText="Id"ItemStyle-Width="30"/> <asp:BoundFieldDataField="Name"HeaderText="Name"ItemStyle-Width="150"/> <asp:BoundFieldDataField="Country"HeaderText="Country"ItemStyle-Width="150"/> </Columns> </asp:GridView> <br/> <asp:ButtonID="Button1"Text="Bulk Insert"OnClick="Bulk_Insert"runat="server"/>
فضای نام ها
احتیاج به افزودن فضای نام های زیر دارید :
usingSystem.Data; usingSystem.Data.SqlClient; usingSystem.Configuration;
انتشار GridView
در این مقاله من GridView را با استفاده از قایل XML در رویداد Page Load انتشار میدهم.
<?xmlversion="1.0"standalone="yes"?> <Customers> <Customer> <Id>1</Id> <Name>John Hammond</Name> <Country>United States</Country> </Customer> <Customer> <Id>2</Id> <Name>Mudassar Khan</Name> <Country>India</Country> </Customer> <Customer> <Id>3</Id> <Name>Suzanne Mathews</Name> <Country>France</Country> </Customer> <Customer> <Id>4</Id> <Name>Robert Schidner</Name> <Country>Russia</Country> </Customer> </Customers>
سی شارپ
protectedvoidPage_Load(object sender, EventArgs e) { if (!this.IsPostBack) { DataSet ds = newDataSet(); ds.ReadXml(Server.MapPath("~/Customers.xml")); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); } }
پاس دادن DataTable به عنوان یک پارامتر به Stored Procedure در سی شارپ
قطعه کد هایی که در ادامه آورده شده اند مربوط به رویداد کلیک دکمه میباشد. در اینجا ابتدا DataTable با شکل وشمایل ستون های مشابهی که توسط نوع جدول کاربری که ایجاد کرده بودیم ، ساخته میشود و سپس حلقه بر روی GridView اجرا میشود.
در داخل حلقه مقادیر سلول های هر ردیف که CheckBox اش فعال است ، واکشی میشود و به DataTable انتقال داده میشود.
در نهایت Stored Procedure با DataTable ای که به صورت پارامتر به آن پاس داده شده است ، اجرا میشود.
protectedvoidBulk_Insert(object sender, EventArgs e) { DataTabledt = newDataTable(); dt.Columns.AddRange(newDataColumn[3] { newDataColumn("Id", typeof(int)), newDataColumn("Name", typeof(string)), newDataColumn("Country",typeof(string)) }); foreach (GridViewRow row in GridView1.Rows) { if ((row.FindControl("CheckBox1") asCheckBox).Checked) { int id = int.Parse(row.Cells[1].Text); string name = row.Cells[2].Text; string country = row.Cells[3].Text; dt.Rows.Add(id, name, country); } } if (dt.Rows.Count> 0) { stringconsString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; using (SqlConnection con = newSqlConnection(consString)) { using (SqlCommandcmd = newSqlCommand("Insert_Customers")) { cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = con; cmd.Parameters.AddWithValue("@tblCustomers", dt); con.Open(); cmd.ExecuteNonQuery(); con.Close(); } } } }
امیدوارم از آن لذت برده باشید!
موفق باشید !
با احترام، درود
لطفا آموزش های نوشتاری سایت رو در قالب فایلی برای دانلود و یا در سایت آتمی تحت عنوان “ذخیره به صورت فایل pdf” قرار دهید.
متشرکم.
۱۲
ممنون از پیشنهاد شما ، در دست اقدام است.
۱۰
سلام این که فارسی سیو نمیکنه خواهشا واسه فارسی سیو کردنش راهنمایی کنید ممنون
۱۱
نوع فیلد ها را به navachar تغییر بدید مشکل حل میشه.
۱۰