簡體   English   中英

將數據從datagridview保存到sql c#

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM