[英]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.