PDA

View Full Version : ارسال چندین رکورد به دیتابیس



eskandary.a
دوشنبه 21 اردیبهشت 1394, 00:13 صبح
سلام
من یه پروژه دارم که تو اون یه فرم واسه پاسخگویی به تعدادی سوال دارم( تقریبا ۳۰ الی ۳۵ سوال) کاربر باید به اون سوالا پااسخ بده .
یه جدول هم دارم که آی دی کاربر و شماره سوال و جوابی که داده رو توی اون نگهداری میکنم. یه sp هم واسه Insert تو اون نوشتم.
تو برنامه به تعداد سوالات این sp رو صدا میزنم. حالا سوال من اینه که این روش روش خوبیه یا نه؟
آیا راهی وجود دارد که همه جوابهارو یک باره بفرستم به sql server و تو جدول ذخیره کنم؟

alireza_s_84
دوشنبه 21 اردیبهشت 1394, 01:14 صبح
سلام
من یه پروژه دارم که تو اون یه فرم واسه پاسخگویی به تعدادی سوال دارم( تقریبا ۳۰ الی ۳۵ سوال) کاربر باید به اون سوالا پااسخ بده .
یه جدول هم دارم که آی دی کاربر و شماره سوال و جوابی که داده رو توی اون نگهداری میکنم. یه sp هم واسه Insert تو اون نوشتم.
تو برنامه به تعداد سوالات این sp رو صدا میزنم. حالا سوال من اینه که این روش روش خوبیه یا نه؟
آیا راهی وجود دارد که همه جوابهارو یک باره بفرستم به sql server و تو جدول ذخیره کنم؟


یک Type Table با فیلدهای مورد نیازتون بسازید (برای خواسته شما میشه شماره سوال و شماره جواب)
بعد یک SP بسازید و پارامترهای موردنیازتون رو تعریف کنید (برای خواسته شما ID کاربر)
در نهایت یک پارامتر از نوع Type Table که ایجاد کردین بصورت ReadOnly تعریف کنید (نوع میشه اسم جدولی که تعریف کنید)
و در مرحله آخر با یک Select ساده در عبارت Insert تمامی رکوردها رو یکباره درج کنید.
برای پاس دادن پارامترها از #C به SQL Server باید نوع پارامتر DataTable باشه و به شکل SqlDbType.Structured تعریف بشه


تعریف یک نوع جدید:

CREATE TYPE [dbo].[CustomerType] AS TABLE(
[Id] [int] NULL,
[Name] [varchar](100) NULL,
[Country] [varchar](50) NULL
)
GO



SP یرای درج رکوردها:

CREATE PROCEDURE [dbo].[Insert_Customers]
@tblCustomers CustomerType READONLY
AS
BEGIN
SET NOCOUNT ON;

INSERT INTO Customers(CustomerId, Name, Country)
SELECT Id, Name, Country FROM @tblCustomers
END



کدهای #C:

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Country",typeof(string)) });


string consString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(consString))
{
using (SqlCommand cmd = new SqlCommand("Insert_Customers"))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
cmd.Parameters.AddWithValue("@tblCustomers", dt);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}