【问题标题】:Trying to insert a datagridview's values into a table iteratively using parameters尝试使用参数迭代地将 datagridview 的值插入到表中
【发布时间】:2017-09-13 11:57:29
【问题描述】:

所以我一直在尝试使用 datagridview 将新行添加到我的数据库中。我不希望事先将整个数据库加载到网格中并刷新它。我只想将数据网格中的值添加到表中。我想不出解决方法。如果我通常这样做,它会给我一个错误,即所有变量都必须是唯一的。我曾尝试添加 sqlconnection.parameters.clear() 函数,但似乎它使所有值都变为空并给我一个错误,我没有为参数提供必要的信息。

string TicketTableInsertString = "INSERT INTO ticketTable (TicketID, num1, num2,num3,num4,num5) VALUES (@TicketID,@num1,@num2,@num3,@num4,@num5)";

        SqlConnection sqlConn;
        connString = "Data Source=DESKTOP-30191JE\\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
        sqlConn = new SqlConnection(connString);

        try
        {
            sqlConn.Open();
            int ticketID=0;
            SqlCommand selectTicketIDCMD = new SqlCommand(selectTicketIDString, sqlConn);
            SqlCommand mainTableInsertCMD = new SqlCommand(MainTableInsertString, sqlConn);
            SqlCommand ticketTableInsertCMD = new SqlCommand(TicketTableInsertString, sqlConn);
            ticketID = (int)selectTicketIDCMD.ExecuteScalar()+1;
            sqlConn.Close();


            for (int i = 0; i < dgv_ticket.Rows.Count; i++)
            {

                ticketTableInsertCMD.Parameters.AddWithValue("@TicketID", ticketID);             
                ticketTableInsertCMD.Parameters.AddWithValue("@num1", dgv_ticket.Rows[i].Cells[0].Value);
                ticketTableInsertCMD.Parameters.AddWithValue("@num2", dgv_ticket.Rows[i].Cells[1].Value);
                ticketTableInsertCMD.Parameters.AddWithValue("@num3", dgv_ticket.Rows[i].Cells[2].Value);
                ticketTableInsertCMD.Parameters.AddWithValue("@num4", dgv_ticket.Rows[i].Cells[3].Value);
                ticketTableInsertCMD.Parameters.AddWithValue("@num5", dgv_ticket.Rows[i].Cells[4].Value);
                sqlConn.Open();
                ticketTableInsertCMD.ExecuteNonQuery();
                sqlConn.Close();

            }

【问题讨论】:

    标签: c# sql datagridview parameters


    【解决方案1】:

    只需在for循环开始时清除sqlCommand参数并为每一行设置ticketID:

    for (int i = 0; i < dgv_ticket.Rows.Count; i++)
            {
                ticketID = (int)selectTicketIDCMD.ExecuteScalar()+1;
                ticketTableInsertCMD.Parameters.Clear();
                ticketTableInsertCMD.Parameters.AddWithValue("@TicketID",  ...
    

    【讨论】:

    • 在我的帖子中提到我已经尝试过。相反,它给出了一个不同的错误,说我没有为它提供任何值。
    • 实际上在这一点上,我觉得我的 IDE 可能是被损坏的那个。它开始在随机声明语句上抛出空引用错误。
    • 在for循环中定义和实例化ticketTableInsertCMD,这会有所帮助。
    • 也试过了,我先把参数清了,然后直接reinstantiate,没修=\
    • 把你的源代码发给我:hamed_abutorabi@yahoo.com
    【解决方案2】:

    找到了一种正确的方法,我在循环外添加了参数,然后在循环内更改了它们的值。

                    ticketTableInsertCMD.Parameters.Add("@TicketID", SqlDbType.Int);
                    ticketTableInsertCMD.Parameters.Add("@num1", SqlDbType.Int);
                    ticketTableInsertCMD.Parameters.Add("@num2", SqlDbType.Int);
                    ticketTableInsertCMD.Parameters.Add("@num3", SqlDbType.Int);
                    ticketTableInsertCMD.Parameters.Add("@num4", SqlDbType.Int);
                    ticketTableInsertCMD.Parameters.Add("@num5", SqlDbType.Int);
    
    
    
                for (int i = 0; i < dgv_ticket.Rows.Count-1; i++)
                {
                    ticketTableInsertCMD.Parameters["@TicketID"].Value = ticketID;
                    ticketTableInsertCMD.Parameters["@num1"].Value = int.Parse(dgv_ticket.Rows[i].Cells[0].Value.ToString());
                    ticketTableInsertCMD.Parameters["@num2"].Value = int.Parse(dgv_ticket.Rows[i].Cells[1].Value.ToString());
                    ticketTableInsertCMD.Parameters["@num3"].Value = int.Parse(dgv_ticket.Rows[i].Cells[2].Value.ToString());
                    ticketTableInsertCMD.Parameters["@num4"].Value = int.Parse(dgv_ticket.Rows[i].Cells[3].Value.ToString());
                    ticketTableInsertCMD.Parameters["@num5"].Value = int.Parse(dgv_ticket.Rows[i].Cells[4].Value.ToString());
    

    【讨论】:

      猜你喜欢
      • 2020-06-04
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多