问题描述
VS2005,C#,SQLSERVER最好能通过存储过程来实现,因为判断的时候灵活一点,可以把一些不符合条件的行过滤掉。
解决方案
解决方案二:
一次性全部导入SQL然后再判断哪些需要删除这样方便一点好像
解决方案三:
usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;usingSystem.Data.OleDb;usingSystem.Data.SqlClient;usingSystem.Web;namespaceWindowsApplication1{///<summary>///Form1的摘要说明。///</summary>publicclassForm1:System.Windows.Forms.Form{privateSystem.Windows.Forms.DataGriddataGrid1;///<summary>///必需的设计器变量。///</summary>privateSystem.ComponentModel.Containercomponents=null;publicForm1(){////Windows窗体设计器支持所必需的//InitializeComponent();////TODO:在InitializeComponent调用后添加任何构造函数代码//}///<summary>///清理所有正在使用的资源。///</summary>protectedoverridevoidDispose(booldisposing){if(disposing){if(components!=null){components.Dispose();}}base.Dispose(disposing);}#regionWindows窗体设计器生成的代码///<summary>///设计器支持所需的方法-不要使用代码编辑器修改///此方法的内容。///</summary>privatevoidInitializeComponent(){this.dataGrid1=newSystem.Windows.Forms.DataGrid();((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();this.SuspendLayout();////dataGrid1//this.dataGrid1.DataMember="";this.dataGrid1.HeaderForeColor=System.Drawing.SystemColors.ControlText;this.dataGrid1.Location=newSystem.Drawing.Point(16,32);this.dataGrid1.Name="dataGrid1";this.dataGrid1.Size=newSystem.Drawing.Size(664,464);this.dataGrid1.TabIndex=0;////Form1//this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);this.ClientSize=newSystem.Drawing.Size(688,494);this.Controls.Add(this.dataGrid1);this.Name="Form1";this.Text="Form1";this.Load+=newSystem.EventHandler(this.Form1_Load);((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();this.ResumeLayout(false);}#endregion///<summary>///应用程序的主入口点。///</summary>[STAThread]staticvoidMain(){Application.Run(newForm1());}privatevoidwirteSql(){DataTabletb;tb=OLEEXCEL().Tables[0];stringstrCreateTable="createtabletable1(";//strCreateTable=tb.Columns[0].ColumnNamefor(intcol=0;col<tb.Columns.Count;col++){if(col==tb.Columns.Count-1){strCreateTable=strCreateTable+"["+tb.Columns[col].ColumnName+"]"+"varchar(50))";}else{strCreateTable=strCreateTable+"["+tb.Columns[col].ColumnName+"]"+"varchar(50),";}}MessageBox.Show(strCreateTable);stringsqlInsert="";for(inti=0;i<tb.Rows.Count;i++){stringcolvalue="";for(intj=0;j<tb.Columns.Count;j++){if(tb.Rows[i][j]==null)colvalue="null";if(j==tb.Columns.Count-1){colvalue=colvalue+"'"+tb.Rows[i][j].ToString()+"'";}else{colvalue=colvalue+"'"+tb.Rows[i][j].ToString()+"'"+",";}}sqlInsert=sqlInsert+"insertintotable1values("+colvalue+")";}MessageBox.Show(sqlInsert);SqlConnectionconn=newSqlConnection("server=(local);database=pubs;uid=sa;pwd=sa;");conn.Open();try{SqlCommandcmd=newSqlCommand();cmd.Connection=conn;cmd.CommandText=strCreateTable+sqlInsert;cmd.ExecuteNonQuery();}catch(Exceptione){MessageBox.Show(e.Message);}conn.Close();}privateDataSetOLEEXCEL(){OleDbConnectionoleDbConnXls=newOleDbConnection();stringstr;str="Provider=Microsoft.Jet.OLEDB.4.0;";str+="DataSource=E:\001.xls;";str+="ExtendedProperties=Excel8.0;";//oleDbConnXls已申明;oleDbConnXls.ConnectionString=str;try{oleDbConnXls.Open();}catch{MessageBox.Show("打开数据库失败!n请检查数据库服务器后重新运行!");}OleDbDataAdapteroleda=newOleDbDataAdapter("select*from[aaa$]",oleDbConnXls);DataSetds=newDataSet();oleda.Fill(ds);if(oleDbConnXls!=null&&oleDbConnXls.State==ConnectionState.Open){oleDbConnXls.Close();}dataGrid1.DataSource=ds.Tables[0];returnds;}privatevoidForm1_Load(objectsender,System.EventArgse){OLEEXCEL();wirteSql();}}}
解决方案四:
insertintoabc(aa,bb,cc)selectaa,bb,ccfromopendatasource('Microsoft.Jet.OLEDB.4.0','datasource="(Excel在服务器上的绝对路径)";ExtendedProperties=Excel8.0')...[Sheet1$]此方法中的Excel文件必须和数据库在同一台服务器上,如果Excel跟数据库不在同一台服务器上,可以先将Excel文件上传到服务器。两个红色的地方必须一样而且Excel文件的第一行必须是和数据库的字段名一致。也就是说数据库里的字段是aa,bb,cc,那么Excel里的第一行必须是aa,bb,cc,从第二行开始是真正要导入的数据
解决方案五:
谢谢大家,好像leon520qqq0的比较好,我也是这种思想,做一下先,有问题在请教大家
解决方案六:
TO:leon520qqq0OLEEXCEL()在oleda.Fill(ds)这里提示错误:“用户代码未处理Oledbexception找不到可安装的ISAM。”