I am trying to save data into two tables. Table 1 will handle generic data( date, teller, total) and table 2 will handle details data( like pname, pqty, pprice). I am trying to save these data into two tables with same ID. For moment I am storing data in this way:
{
conn.Open();
foreach (DataGridViewRow row in dtgprofatura.Rows)
{
if (!row.IsNewRow)
{
SqlCommand cmd = new SqlCommand("insertprofatura", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("@shenime", txtshenimi.Text));
cmd.Parameters.Add(new SqlParameter("@data", DateTime.Now));
cmd.Parameters.Add(new SqlParameter("@kasieri", lbluser.Text));
cmd.Parameters.Add(new SqlParameter("@NR_F", int.Parse(lblidfatura.Text)));
cmd.Parameters.Add(new SqlParameter("@emri_sh", lblshitesiemri.Text));
cmd.Parameters.Add(new SqlParameter("@niptsh", int.Parse(lblshitesinipt.Text)));
cmd.Parameters.Add(new SqlParameter("@adresash", lbladresashitesi.Text));
cmd.Parameters.Add(new SqlParameter("@telefonish", lblshitesitelefon.Text));
cmd.Parameters.Add(new SqlParameter("@emri_b", cmbbleresi.Text));
cmd.Parameters.Add(new SqlParameter("@niptb", lblbleresinipt.Text));
cmd.Parameters.Add(new SqlParameter("@adresab", lblbleresiadresa.Text));
cmd.Parameters.Add(new SqlParameter("@telefonib", lblbleresitelefoni.Text));
cmd.Parameters.Add(new SqlParameter("@nentotali", lblnentotali.Text));
cmd.Parameters.Add(new SqlParameter("@vleratvsh", lblvleratvsh.Text));
cmd.Parameters.Add(new SqlParameter("@zbritja", txtzbritja.Text));
cmd.Parameters.Add(new SqlParameter("@totali", lbltotali.Text));
cmd.Parameters.Add(new SqlParameter("@barkodi", row.Cells[0].Value));
cmd.Parameters.Add(new SqlParameter("@emertimi", row.Cells[1].Value));
cmd.Parameters.Add(new SqlParameter("@sasia", row.Cells[3].Value));
cmd.Parameters.Add(new SqlParameter("@cmimi", row.Cells[2].Value));
cmd.Parameters.Add(new SqlParameter("@totaliPCS", row.Cells[5].Value));
cmd.Parameters.Add(new SqlParameter("@tvsh", row.Cells[4].Value));
cmd.Parameters.Add(new SqlParameter("@vleratvshpcs", row.Cells[7].Value));
cmd.Parameters.Add(new SqlParameter("@patvshpcs", row.Cells[6].Value));
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Procedimi i profatures deshtoi " + ex.ToString());
}
finally
{
conn.Close();
clear();
kRIJOToolStripMenuItem.PerformClick();
}
and the SP used for insertation:
ALTER procedure [dbo].[insertprofatura]
@shenime varchar(max),
@data datetime,
@kasieri varchar(50),
@NR_F int,
@emri_sh varchar(50),
@niptsh varchar(50),
@adresash varchar(100),
@telefonish varchar(50),
@emri_b varchar(50),
@niptb varchar(50),
@adresab varchar(100),
@telefonib varchar(50),
@nentotali float,
@zbritja float,
@vleratvsh float,
@totali float,
@barkodi int,
@emertimi varchar(200),
@sasia int,
@cmimi float,
@totaliPCS float,
@tvsh float,
@vleratvshpcs float,
@patvshpcs float
as
insert into tblprofatura (NR_F,Shenime,Data,Kasieri,Emri_sh,NIPT_sh,Adresa_sh,Telefoni_sh,Emri_b,NIPT_b,Adresa_b,Telefoni_b,Nentot ali,Zbritja,VleraTVSH,Totali)
values(@NR_F,@shenime,@data,@kasieri,@emri_sh,@niptsh,@adresash,@telefonish,@emri_b,@niptb,@adresab,@telefonib,@nentotali,@zbritja,@vleratvsh,@totali)
insert into tblproofatura_details(NR_F,Barkodi,Emertimi,Cmimi,Sasia,TVSH,Totali,PaTVSHpcs,VleraTVSHpcs)
values (@NR_F,@barkodi,@emertimi,@cmimi,@sasia,@tvsh,@totaliPCS,@patvshpcs,@vleratvsh)
But the main problem from above code is that the bill number( NR_F) is stored via code, not automatically, which it is not a great option( due to clonflict data on dba) I used the ID field( autonumber, identiy(1,1)). but the id isn't the same. As much product i insert , as much ID will be provided( and where i want to call these data,i cant call by id due to large count of id inserted). The main question is how do i insert only one row in table 1(date, total, teller), and multiple rows in table 2 (product details), (related to each other by bill number(NR_F)). ONE -TO-MANY
Code edited :
ALTER procedure [dbo].[insertimi]
@shenime varchar(max),
@data datetime,
@kasieri varchar(50),
@emri_sh varchar(50),
@niptsh varchar(50),
@adresash varchar(100),
@telefonish varchar(50),
@emri_b varchar(50),
@niptb varchar(50),
@adresab varchar(100),
@telefonib varchar(50),
@nentotali float,
@zbritja float,
@vleratvsh float,
@totali float,
@barkodi int,
@emertimi varchar(200),
@sasia int,
@cmimi float,
@totaliPCS float,
@tvsh float,
@vleratvshpcs float,
@patvshpcs float
as
declare @lastId int;
insert into tblprofatura (Shenime,Data,Kasieri,Emri_sh,NIPT_sh,Adresa_sh,Telefoni_sh,Emri_b,NIPT_b,Adresa_b,Telefoni_b,Nentotali,Zbritja,VleraTVSH,Totali)
values(@shenime,@data,@kasieri,@emri_sh,@niptsh,@adresash,@telefonish,@emri_b,@niptb,@adresab,@telefonib,@nentotali,@zbritja,@vleratvsh,@totali)
set @lastId = SCOPE_IDENTITY();
insert into tblproofatura_details(NR_F,Barkodi,Emertimi,Cmimi,Sasia,TVSH,Totali,PaTVSHpcs,VleraTVSHpcs)
values (@lastId,@barkodi,@emertimi,@cmimi,@sasia,@tvsh,@totaliPCS,@patvshpcs,@vleratvsh)
But now inn my parent table for example are being inserted three rows with different ID, and in my child table none row is being inserted. I want in my parent table one row with generic data to be inserted and ni my child table as many rows needed related to parent ID