2012-01-12 142 views
1

大家好,我想从我的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控件等数据做

+0

[使用的foreach用于插入gridview的数据到SQL数据库]的可能重复(http://stackoverflow.com/questions/6185800/using-foreach-for-insert-gridview-data-into-sql-database ) – 2012-01-12 21:17:22

回答

0

https://stackoverflow.com/a/6185836/843327

所以(无论如何),您需要在该表的每一行上执行foreach循环。在foreach中,您将获得SqlConnection,SqlCommand,SqlParameters和执行。

链接应该提供正确的信息!希望能帮助到你!

斯蒂芬

0

如果你想使用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); 
}