插入数据表内容到SQL Server
问题描述:
大家好,我想从我的datagridveiw取数据,并插入到我的SQL服务器,但我卡在插入部分,这里是我迄今为止插入数据表内容到SQL Server
private void button1_Click(object sender, EventArgs e)
{
var fdlg = new OpenFileDialog();
fdlg.Title = @"Site Assist Database Update";
fdlg.InitialDirectory = @"c:\";
fdlg.Filter = @"CSV Files (*.csv)|*.csv";
fdlg.FilterIndex = 2;
fdlg.RestoreDirectory = true;
if (fdlg.ShowDialog() == DialogResult.OK)
{
string filepath = fdlg.FileName;
var engine = new FileHelperEngine<PartList>();
engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;
PartList[] res = engine.ReadFile(filepath);
if (engine.ErrorManager.ErrorCount > 0)
engine.ErrorManager.SaveErrors("Errors.txt");
var table = new DataTable();
table.Columns.Add("Part Number", typeof (string));
table.Columns.Add("Part Name", typeof(string));
table.Columns.Add("On Hand New", typeof(string));
table.Columns.Add("On Hand Fixed", typeof(string));
table.Columns.Add("SC5 - Storage Bin - EAME", typeof(string));
table.Columns.Add("Is ASL Item", typeof(string));
table.Columns.Add("Reorder Point", typeof(string));
table.Columns.Add("Stock Maximum", typeof(string));
table.Columns.Add("On Order", typeof(string));
table.Columns.Add("Back Order", typeof(string));
table.Columns.Add("Part Cost", typeof(string));
table.Columns.Add("PC11 - Repairable - EAME", typeof(string));
foreach (PartList row in res)
{
table.Rows.Add(row.PartNum, row.PartName, row.New, row.Fix, row.Location, row.ASL, row.ReorderPoint,
row.stockMax, row.OnOrder, row.BackOrder, CleanInput(row.Cost), row.Repairable);
}
dataGridView1.DataSource = table;
MessageBox.Show(table.Rows.Count.ToString());
}
}
我搜索了一下,找不到有关如何实现这一目标的任何非常好的固体样本。
SqlBulkCopy
是一个选项,但再次我会坚持我的手,说我不知道如何,一旦你在你的数据表,GridView控件等数据做
答
https://stackoverflow.com/a/6185836/843327
所以(无论如何),您需要在该表的每一行上执行foreach循环。在foreach中,您将获得SqlConnection,SqlCommand,SqlParameters和执行。
链接应该提供正确的信息!希望能帮助到你!
斯蒂芬
答
如果你想使用SqlBulkCopy的对象,重要的是你的DataTable对象具有相同的架构作为目标数据库表。如果你正在处理很多行,这是一个好方法。如果不是,则最好使用普通的SQL INSERT查询。
附加一些代码来显示使用SqlBulkCopy的方法。请注意,本地DataTable(MyDataTable)的模式是从数据库中填充的。这确保您具有相同的架构并避免使用代码进行繁琐的设置。
DataTable MyDataTable = new DataTable();
// this section will get the schema of your target table without retriving any data
using(SqlConnection MyConnection = new SqlConnection("a connection string")) {
string getSchemaSql = "SELECT * FROM MyDatabaseTable WHERE 1 = 0";
SqlDataAdapter A = new SqlDataAdapter(getSchemaSql, MyConnection);
MyConnection.Open();
A.FillSchema(MyDataTable, SchemaType.Source);
}
// add your information to MyDataTable
foreach (PartList row in res) {
MyDataTable.Rows.Add(row.PartNum, row.PartName, row.New, row.Fix, row.Location, row.ASL, row.ReorderPoint, row.stockMax, row.OnOrder, row.BackOrder, CleanInput(row.Cost), row.Repairable);
}
// assign MyDataTable as your DataGridView source
dataGridView1.DataSource = MyDataTable;
// export MyDataTable to the DBMS database table
using(SqlConnection MyConnection = new SqlConnection("a connection string")) {
SqlBulkCopy TheBulkCopier = new SqlBulkCopy(MyConnection);
TheBulkCopier.DestinationTableName = "MyDatabaseTable";
MyConnection.Open();
TheBulkCopier.WriteToServer(MyDataTable);
}
[使用的foreach用于插入gridview的数据到SQL数据库]的可能重复(http://stackoverflow.com/questions/6185800/using-foreach-for-insert-gridview-data-into-sql-database ) – 2012-01-12 21:17:22