C# 将DataGridView 数据插入数据库成功但只有returns 第一个值n 次?
C# Inserting DataGridView data into database succeeds but only returns the first value n times?
知道为什么在给定 5 行 DGV 的情况下这仅 return 是 DataGridView 的第一个值 5 次吗?
sql 应该成功插入,我的循环中一定有我没有发现的错误。理想情况下,它应该 return datagridview 中的 5 行值而不仅仅是第一行,有效地将整个 datagridview 传输到数据库中。
using (OleDbConnection conn = new OleDbConnection(Con))
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = conn;
conn.Open();
for (int i = 0; i <= DGVExcel.Rows.Count - 1; i++)
{
cmd.CommandText =
"Insert INTO ACTB (FirstName, LastName, GrossIncome, LessTNT, TaxableIncomeCE, TaxableIncomePE, GrossTaxableIncome, LessTE, LessPPH, NetTax, TaxDue, HeldTaxCE, HeldTaxPE, TotalTax) " +
"VALUES(@First, @Last, @Gross, @LessTNT, @TCI, @ADDTI, @GTI, @LessTE, @LessPPH, @LessNTI, @TD, @TWCE, @TWPE, @TATW)";
//cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(txtID.Text));
cmd.Parameters.AddWithValue("@First", DGVExcel.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@Last", DGVExcel.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@Gross", Convert.ToDouble(DGVExcel.Rows[i].Cells[2].Value));
cmd.Parameters.AddWithValue("@LessTNT",
Convert.ToDouble(DGVExcel.Rows[i].Cells[3].Value));
cmd.Parameters.AddWithValue("@TCI", Convert.ToDouble(DGVExcel.Rows[i].Cells[4].Value));
cmd.Parameters.AddWithValue("@ADDTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[5].Value));
cmd.Parameters.AddWithValue("@GTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[6].Value));
cmd.Parameters.AddWithValue("@LessTE", Convert.ToDouble(DGVExcel.Rows[i].Cells[7].Value));
cmd.Parameters.AddWithValue("@LessPPH",
Convert.ToDouble(DGVExcel.Rows[i].Cells[8].Value));
cmd.Parameters.AddWithValue("@LessNTI",
Convert.ToDouble(DGVExcel.Rows[i].Cells[9].Value));
cmd.Parameters.AddWithValue("@TD", Convert.ToDouble(DGVExcel.Rows[i].Cells[10].Value));
cmd.Parameters.AddWithValue("@TWCE", Convert.ToDouble(DGVExcel.Rows[i].Cells[11].Value));
cmd.Parameters.AddWithValue("@TWPE", Convert.ToDouble(DGVExcel.Rows[i].Cells[12].Value));
cmd.Parameters.AddWithValue("@TATW", Convert.ToDouble(DGVExcel.Rows[i].Cells[13].Value));
cmd.ExecuteNonQuery();
}
}
您需要为循环期间的每个新插入调用初始化 OleDdCommand。试试这个:
using (OleDbConnection conn = new OleDbConnection(Con))
{
conn.Open();
for (int i = 0; i <= DGVExcel.Rows.Count - 1; i++)
{
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText =
"Insert INTO ACTB (FirstName, LastName, GrossIncome, LessTNT, TaxableIncomeCE, TaxableIncomePE, GrossTaxableIncome, LessTE, LessPPH, NetTax, TaxDue, HeldTaxCE, HeldTaxPE, TotalTax) " +
"VALUES(@First, @Last, @Gross, @LessTNT, @TCI, @ADDTI, @GTI, @LessTE, @LessPPH, @LessNTI, @TD, @TWCE, @TWPE, @TATW)";
//cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(txtID.Text));
cmd.Parameters.AddWithValue("@First", DGVExcel.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@Last", DGVExcel.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@Gross", Convert.ToDouble(DGVExcel.Rows[i].Cells[2].Value));
cmd.Parameters.AddWithValue("@LessTNT",
Convert.ToDouble(DGVExcel.Rows[i].Cells[3].Value));
cmd.Parameters.AddWithValue("@TCI", Convert.ToDouble(DGVExcel.Rows[i].Cells[4].Value));
cmd.Parameters.AddWithValue("@ADDTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[5].Value));
cmd.Parameters.AddWithValue("@GTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[6].Value));
cmd.Parameters.AddWithValue("@LessTE", Convert.ToDouble(DGVExcel.Rows[i].Cells[7].Value));
cmd.Parameters.AddWithValue("@LessPPH",
Convert.ToDouble(DGVExcel.Rows[i].Cells[8].Value));
cmd.Parameters.AddWithValue("@LessNTI",
Convert.ToDouble(DGVExcel.Rows[i].Cells[9].Value));
cmd.Parameters.AddWithValue("@TD", Convert.ToDouble(DGVExcel.Rows[i].Cells[10].Value));
cmd.Parameters.AddWithValue("@TWCE", Convert.ToDouble(DGVExcel.Rows[i].Cells[11].Value));
cmd.Parameters.AddWithValue("@TWPE", Convert.ToDouble(DGVExcel.Rows[i].Cells[12].Value));
cmd.Parameters.AddWithValue("@TATW", Convert.ToDouble(DGVExcel.Rows[i].Cells[13].Value));
cmd.ExecuteNonQuery();
}
}
知道为什么在给定 5 行 DGV 的情况下这仅 return 是 DataGridView 的第一个值 5 次吗? sql 应该成功插入,我的循环中一定有我没有发现的错误。理想情况下,它应该 return datagridview 中的 5 行值而不仅仅是第一行,有效地将整个 datagridview 传输到数据库中。
using (OleDbConnection conn = new OleDbConnection(Con))
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = conn;
conn.Open();
for (int i = 0; i <= DGVExcel.Rows.Count - 1; i++)
{
cmd.CommandText =
"Insert INTO ACTB (FirstName, LastName, GrossIncome, LessTNT, TaxableIncomeCE, TaxableIncomePE, GrossTaxableIncome, LessTE, LessPPH, NetTax, TaxDue, HeldTaxCE, HeldTaxPE, TotalTax) " +
"VALUES(@First, @Last, @Gross, @LessTNT, @TCI, @ADDTI, @GTI, @LessTE, @LessPPH, @LessNTI, @TD, @TWCE, @TWPE, @TATW)";
//cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(txtID.Text));
cmd.Parameters.AddWithValue("@First", DGVExcel.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@Last", DGVExcel.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@Gross", Convert.ToDouble(DGVExcel.Rows[i].Cells[2].Value));
cmd.Parameters.AddWithValue("@LessTNT",
Convert.ToDouble(DGVExcel.Rows[i].Cells[3].Value));
cmd.Parameters.AddWithValue("@TCI", Convert.ToDouble(DGVExcel.Rows[i].Cells[4].Value));
cmd.Parameters.AddWithValue("@ADDTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[5].Value));
cmd.Parameters.AddWithValue("@GTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[6].Value));
cmd.Parameters.AddWithValue("@LessTE", Convert.ToDouble(DGVExcel.Rows[i].Cells[7].Value));
cmd.Parameters.AddWithValue("@LessPPH",
Convert.ToDouble(DGVExcel.Rows[i].Cells[8].Value));
cmd.Parameters.AddWithValue("@LessNTI",
Convert.ToDouble(DGVExcel.Rows[i].Cells[9].Value));
cmd.Parameters.AddWithValue("@TD", Convert.ToDouble(DGVExcel.Rows[i].Cells[10].Value));
cmd.Parameters.AddWithValue("@TWCE", Convert.ToDouble(DGVExcel.Rows[i].Cells[11].Value));
cmd.Parameters.AddWithValue("@TWPE", Convert.ToDouble(DGVExcel.Rows[i].Cells[12].Value));
cmd.Parameters.AddWithValue("@TATW", Convert.ToDouble(DGVExcel.Rows[i].Cells[13].Value));
cmd.ExecuteNonQuery();
}
}
您需要为循环期间的每个新插入调用初始化 OleDdCommand。试试这个:
using (OleDbConnection conn = new OleDbConnection(Con))
{
conn.Open();
for (int i = 0; i <= DGVExcel.Rows.Count - 1; i++)
{
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText =
"Insert INTO ACTB (FirstName, LastName, GrossIncome, LessTNT, TaxableIncomeCE, TaxableIncomePE, GrossTaxableIncome, LessTE, LessPPH, NetTax, TaxDue, HeldTaxCE, HeldTaxPE, TotalTax) " +
"VALUES(@First, @Last, @Gross, @LessTNT, @TCI, @ADDTI, @GTI, @LessTE, @LessPPH, @LessNTI, @TD, @TWCE, @TWPE, @TATW)";
//cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(txtID.Text));
cmd.Parameters.AddWithValue("@First", DGVExcel.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@Last", DGVExcel.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@Gross", Convert.ToDouble(DGVExcel.Rows[i].Cells[2].Value));
cmd.Parameters.AddWithValue("@LessTNT",
Convert.ToDouble(DGVExcel.Rows[i].Cells[3].Value));
cmd.Parameters.AddWithValue("@TCI", Convert.ToDouble(DGVExcel.Rows[i].Cells[4].Value));
cmd.Parameters.AddWithValue("@ADDTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[5].Value));
cmd.Parameters.AddWithValue("@GTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[6].Value));
cmd.Parameters.AddWithValue("@LessTE", Convert.ToDouble(DGVExcel.Rows[i].Cells[7].Value));
cmd.Parameters.AddWithValue("@LessPPH",
Convert.ToDouble(DGVExcel.Rows[i].Cells[8].Value));
cmd.Parameters.AddWithValue("@LessNTI",
Convert.ToDouble(DGVExcel.Rows[i].Cells[9].Value));
cmd.Parameters.AddWithValue("@TD", Convert.ToDouble(DGVExcel.Rows[i].Cells[10].Value));
cmd.Parameters.AddWithValue("@TWCE", Convert.ToDouble(DGVExcel.Rows[i].Cells[11].Value));
cmd.Parameters.AddWithValue("@TWPE", Convert.ToDouble(DGVExcel.Rows[i].Cells[12].Value));
cmd.Parameters.AddWithValue("@TATW", Convert.ToDouble(DGVExcel.Rows[i].Cells[13].Value));
cmd.ExecuteNonQuery();
}
}