尝试使用存储过程将行保存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();
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。