开发者社区> 问答> 正文

将数据从Datagridview保存到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)的第二个表中

我的代码出了什么问题?感谢您的协助。

展开
收起
祖安文状元 2020-01-04 15:19:26 668 0
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();
    
    2020-01-04 15:19:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载