[英]Saving data from datagridview to sql c#
嘗試使用存儲過程將行從datagridview
保存到SQL Server
表時出現問題。
這是 C# 代碼:
SqlConnection con = new SqlConnection("server= localhost;Database = Vehiculum ;integrated Security = true");
con.Open();
SqlCommand cmd = new SqlCommand("inserproducts", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlConnection con = new SqlConnection("server= localhost;Database = Vehiculum ;integrated Security = true");
con.Open();
SqlCommand cmd = new SqlCommand("insertservisi", con);
cmd.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < dtgservisimi.Rows.Count; i++)
{
cmd.Parameters.AddWithValue("@kategoria", dtgservisimi.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@servisimi", dtgservisimi.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@barkodi", dtgservisimi.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@emertimi", dtgservisimi.Rows[i].Cells[3].Value);
cmd.Parameters.AddWithValue("@sasia", dtgservisimi.Rows[i].Cells[4].Value);
cmd.Parameters.AddWithValue("@garancioni", dtgservisimi.Rows[i].Cells[5].Value);
cmd.Parameters.AddWithValue("@emri", txtemri.Text);
cmd.Parameters.AddWithValue("@mbiemri", txtmbiemri.Text);
cmd.Parameters.AddWithValue("@telefoniI", txttelefoniI.Text);
cmd.Parameters.AddWithValue("@telefoniII", txttelefoniII.Text);
cmd.Parameters.AddWithValue("@adresa", txtadresa.Text);
cmd.Parameters.AddWithValue("@komuna", cmbkomuna.Text);
cmd.Parameters.AddWithValue("@prodhuesi", cmbprodhuesi.Text);
cmd.Parameters.AddWithValue("@modeli", cmbmodeli.Text);
cmd.Parameters.AddWithValue("@motorri", cmbmotori.Text);
cmd.Parameters.AddWithValue("@shasia", txtshasia.Text);
cmd.Parameters.AddWithValue("@tabela", txttabela.Text);
cmd.Parameters.AddWithValue("@viti", txtviti.Text);
cmd.Parameters.AddWithValue("@shenime", txtshenime.Text);
cmd.Parameters.AddWithValue("@data", DateTime.Now);
cmd.Parameters.AddWithValue("@punetori", lbluser.Text);
}
cmd.ExecuteNonQuery();
con.Close();
和存儲過程代碼:
使用 [車輛] GO
ALTER procedure [dbo].[insertservisi]
@emri varchar(50) = null,
@mbiemri varchar (50) =null,
@telefoniI varchar (50) = null,
@telefoniII varchar (50) = null,
@adresa varchar (100) = null,
@komuna varchar (50) = null,
@prodhuesi varchar (50) = null,
@modeli varchar (50) = null,
@motorri varchar (50) = null,
@shasia varchar (50) = null,
@tabela varchar (50) = null,
@viti varchar (50) = null,
@kategoria varchar (100) = null,
@servisimi varchar (20) = null,
@barkodi int = null,
@emertimi varchar (max) = null,
@sasia int = null,
@garancioni varchar(200) = null,
@shenime varchar(max) = null,
@data datetime = null,
@punetori varchar(100) = null
as
declare @id int;
INSERT INTO
Servisimi_info
(Emri,
Mbiemri,
TelefoniI,
TelefoniII,
Adresa,
Komuna,
Prodhuesi,
Modeli,
Motorri,
Shasia,
Tabela,
Viti,
Data_servisimit,
Punetori)
VALUES (@emri,
@mbiemri,
@telefoniI,
@telefoniII,
@adresa,
@komuna,
@prodhuesi,
@modeli,
@motorri,
@shasia,
@tabela,
@viti,
@data,
@punetori)
set @id = scope_identity();
INSERT INTO Servisimi_produkti
(Kategoria,
Servisimi,
Barkodi,
Emertimi,
Sasia,
Garancion,
Shenime,
Id_servisimi)
VALUES
(@kategoria,
@servisimi,
@barkodi,
@emertimi,
@sasia,
@garancioni,
@shenime,
@id)
但我收到這個錯誤。
過程或函數指定的參數過多
我正在嘗試將數據數據存儲在兩個表中。 第二個表有一個外鍵連接到主鍵(第一個表)。 此外,datagridview 有多行必須存儲在具有相同 ID 的第二個表中(來自表 1)
我的代碼出了什么問題? 感謝您的幫助。
我假設(從你的問題中不清楚)你想多次調用這個存儲過程 - 在一個循環內。
在那種情況下(並且一直以來,真的),您應該在循環外定義參數一次,然后在循環內設置它們的值並調用存儲過程。
就像是:
SqlConnection con = new SqlConnection("server= localhost;Database = Vehiculum ;integrated Security = true");
SqlCommand cmd = new SqlCommand("insertservisi", con);
cmd.CommandType = CommandType.StoredProcedure;
// *DEFINE* the parameters - once, before the loop - in the same order they're defined in the stored procedure!
cmd.Parameters.Add("@emri", SqlDbType.VarChar, 50);
cmd.Parameters.Add("@mbiemri", SqlDbType.VarChar, 50);
cmd.Parameters.Add("@telefoniI", SqlDbType.VarChar, 50);
// and so forth, for all your parameters
// now open connection, loop
con.Open();
for (int i = 0; i < dtgservisimi.Rows.Count; i++)
{
// set the parameter values
cmd.Parameters["@emri"].Value = txtemri.Text;
cmd.Parameters["@mbiemri".Value = txtmbiemri.Text;
cmd.Parameters["@telefoniI".Value = txttelefoniI.Text;
// and so forth, for all your parameters
// execute the procedure
cmd.ExecuteNonQuery();
}
con.Close();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.