INSERT from DataGridView in DB



我的代码只将第一行传递给数据库。我是。net的新手。谁能提出这个问题。

for(int i = 0; i < dgvCSV_Datei.Rows.Count; i++)
{
var strQuery = "INSERT INTO Mobile (Name, IMEI, Hersteller) VALUES (@Name, @IMEI, @Hersteller)";
sqlCommand.CommandText = strQuery;
sqlCommand.Parameters.AddWithValue("@Name", dgvCSV_Datei.Rows[i].Cells[0].Value);
sqlCommand.Parameters.AddWithValue("@IMEI", dgvCSV_Datei.Rows[i].Cells[1].Value);
sqlCommand.Parameters.AddWithValue("@Hersteller", dgvCSV_Datei.Rows[i].Cells[2].Value);
sqlCommand.ExecuteNonQuery();
}
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();

您的问题似乎是您不断添加更多具有相同名称的参数,而没有删除或更改以前的参数。你的代码应该像这样

const string strQuery = @"
INSERT INTO Mobile (Name, IMEI, Hersteller)
VALUES (@Name, @IMEI, @Hersteller);
";
using (var sqlConnection = new SqlConnection(YourConnString))
using (var sqlCommand = new SqlCommand(strQuery, sqlConnection))
{
sqlCommand.Parameters.Add("@Name", SqlDbType.VarChar, 100);
sqlCommand.Parameters.Add("@IMEI", SqlDbType.Varchar, 16);
sqlCommand.Parameters.Add("@Hersteller", SqlDbType.VarChar, 100);
sqlConnection.Open();
for(int i = 0; i < dgvCSV_Datei.Rows.Count; i++)
{
sqlCommand.Parameters["@Name"].Value = dgvCSV_Datei.Rows[i].Cells[0].Value;
sqlCommand.Parameters["@IMEI"].Value = dgvCSV_Datei.Rows[i].Cells[1].Value;
sqlCommand.Parameters["@Hersteller"].Value = dgvCSV_Datei.Rows[i].Cells[2].Value;
sqlCommand.ExecuteNonQuery();
}
}               

一个更好的选择是使用SqlBulkCopy这是一种高性能的大容量复制机制,专门用于普通插入。

using (var bulk = new SqlBulkCopy(YourConnString, SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.FireTriggers))
{
bulk.DestinationTableName = "Mobile";
bulk.ColumnMappings.Add(dgvCSV_Datei.Columns[0].ColumnName, "Name");
bulk.ColumnMappings.Add(dgvCSV_Datei.Columns[1].ColumnName, "IMEI");
bulk.ColumnMappings.Add(dgvCSV_Datei.Columns[2].ColumnName, "Hersteller");
bulk.WriteToServer(dgvCSV_Datei);
}