با سلام
Table-valuedمن در برنامه ام با استفاده از
چند رکورد را همزمان به دیتابیسم ارسال کردم،و در همان لحظه هم نیاز دارم که این رکورد های ثبت شده در جدول اولم را در یک جدول دوم هم ثبت کنم و لازمه آیدی هایی که به طور اتوماتیک در جدول اول مقداردهی شده اند در جدول دوم هم به همراه سایر اطلاعاتشون ثبت بشن..
سلام دوست عزیز
چون جزئیات رو نذاشتید بنده فرضهای زیر رو گرفتم
جدول اول شما :
CREATE TABLE [dbo].[Table1](
[Id] [int] NOT NULL,
[Shift] [int] NOT NULL,
[Date] [varchar](10) NOT NULL,
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
جدول دوم شما
CREATE TABLE [dbo].[Table2](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Table1Id] [int] NOT NULL,
[Date] [varchar](10) NOT NULL,
[Message] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
تایپ Table Valued شما
CREATE TYPE [dbo].[MyType] AS TABLE(
[Id] [int] NOT NULL,
[Shift] [int] NOT NULL,
[Date] [varchar](10) NOT NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
استورد پروسیجر شما
ALTER PROCEDURE [dbo].[uspInsertTable2]
(
@MyTable MyType READONLY
)
AS
INSERT INTO Table2(Table1Id, Date,Message)
SELECT Id as Table1Id ,Date, 'Message' as Message FROM @MyTable
و اما کد #C لازمه
private DataTable MyData()
{
DataTable tb = new DataTable();
DataColumn col = new DataColumn("Id", typeof(int));
tb.Columns.Add(col);
col = new DataColumn("Shift", typeof(int));
tb.Columns.Add(col);
col = new DataColumn("Date", typeof(string));
tb.Columns.Add(col);
for (int i = 0; i < 20; i++)
{
DataRow row = tb.NewRow();
row["Id"] = i;
row["Shift"] = i;
row["Date"] = "1390/07/08";
tb.Rows.Add(row);
}
return tb;
}
private void btnInsert_Click(object sender, EventArgs e)
{
string ConnectionString = @"Data Source = .\sqlexpress;Initial CAtalog = Ishtar;Integrated Security = True";
using (SqlConnection con = new SqlConnection(ConnectionString))
{
try
{
SqlCommand cmd = new SqlCommand("uspInsertTable2", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@MyTable", MyData());
con.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Insert Completed.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (con.State == ConnectionState.Open)
con.Close();
}
}
}
موفق باشید.