使用OleDbCommand执行insert sql 语句

解决方案 »

  1.   

    dc = new OleDbCommand("insert * into Sheet1 values " + ds.Tables[0].Rows[i][j], conn);
    改成这样还是无法写入
      

  2.   

     OleDbConnection   conn   =   new   OleDbConnection(strConn); 
    Oledbcommand cmd=new Oledbcommand(cd,conn); 
    cmd.ExecuteNonQuery();
        conn.Close(); 你试试这样看看把这些代码替换成上面的                                        OleDbConnection   conn   =   new   OleDbConnection(strConn); 
                                            conn.Open(); 
                                            
                                            OleDbDataAdapter   dc   =   null; 
                                            dc   =   new   OleDbDataAdapter(cd,   strConn); 
                                            conn.Close(); 
                                          
      

  3.   

    谢谢楼上的,不过~~~这次轮到INSERT INTO 语句有问题~~~~T_T
    继续请教
      

  4.   

    "Insert into Sheet1(字段名) values ('"+ds.Tables[0].Rows[i][j]+"')"
      

  5.   

    是INSERT INTO 附近有写错,还是思路错了?如果是思路错,应该如何解决?
      

  6.   

    目标是将整个excel表的数据写入数据库文档
      

  7.   

    哪位可以帮忙改一下,还有请问ExecuteNonQuery作用是什么??
      

  8.   

    Insert   into   数据库表名(表里的字段名)   values   ( ' "+ds.Tables[0].Rows[i][j].ToString()+ " ') "
      

  9.   

    如果这样改,那么只有一个列写入数据,我想把整个excel写入access中
    请帮忙改下
      

  10.   

    不写字段名那Values里的值要和数据库里的字段数要一样的多。
      

  11.   

    恩,已经试过了
    如果加入字段名如:字段2
    就会出现 "至少一个参数没有被指定值"这样的错误
    如果不加字段名就说 INSERT INTO 语法错误我已经试过很多方法了,还是不行T_T
      

  12.   

    "insert   *   into   Sheet1   values   ("   +   ds.Tables[0].Rows[i][j].ToString()+")";
    还有你每一行每一列都写到数据库里去?逻辑没有问题?
      

  13.   

    我把程序改为这样,各位觉得可以吗?
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Reflection;
    using System.IO;
    using System.Data.OleDb;
    using System.Data.SqlClient;namespace test4
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                string strCon="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\\northwind.mdb";
                string Con = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=d:\\1.xls;Extended Properties=Excel 8.0;";
                string sql = "select * from [" + "sheet1" + "$]";
                DataSet ds = new DataSet();
                OleDbConnection obj = new OleDbConnection(Con);
                obj.Open();
                OleDbDataAdapter ada = new OleDbDataAdapter(sql, obj);
                ada.Fill(ds);
                //生成dataTable   
                DataTable dt = new DataTable();
                dt = ds.Tables[0];           
                OleDbDataAdapter   da=new   OleDbDataAdapter();//将dt中内容一次插入数据库    
                OleDbCommand Cmd = new OleDbCommand("Insert Into   Sheet1(订单号,货号,含量,上月结存,本月增加,本月减少,结存,工厂,存货仓库,仓位,唛头)   values(@订单号,@货号,@含量,@上月结存,@本月增加,@本月减少,@结存,@工厂,@存货仓库,@仓位,@唛头)", conn);
                Cmd.Parameters.("@订单号","订单号");
                Cmd.Parameters["@订单号"].SourceColumn = dt.Columns["订单号"].ColumnName;
                
                Cmd.Parameters.Add("@货号", "货号");
                Cmd.Parameters["@货号"].SourceColumn = dt.Columns["货号"].ColumnName;
                
                Cmd.Parameters.Add("@含量", "含量");
                Cmd.Parameters["@含量"].SourceColumn = dt.Columns["含量"].ColumnName;
                
                Cmd.Parameters.Add("@上月结存", "上月结存");
                Cmd.Parameters["@上月结存"].SourceColumn = dt.Columns["上月结存"].ColumnName;
                
                Cmd.Parameters.Add("@本月增加", "本月增加");
                Cmd.Parameters["@本月增加"].SourceColumn = dt.Columns["本月增加"].ColumnName;
                
                Cmd.Parameters.Add("@本月减少", "本月减少");
                Cmd.Parameters["@本月减少"].SourceColumn = dt.Columns["本月减少"].ColumnName;
                
                Cmd.Parameters.Add("@结存", "结存");
                Cmd.Parameters["@结存"].SourceColumn = dt.Columns["结存"].ColumnName;
                
                Cmd.Parameters.Add("@工厂", "工厂");
                Cmd.Parameters["@工厂"].SourceColumn = dt.Columns["工厂"].ColumnName;
                
                Cmd.Parameters.Add("@存货仓库", "存货仓库");
                Cmd.Parameters["@存货仓库"].SourceColumn = dt.Columns["存货仓库"].ColumnName;
                
                Cmd.Parameters.Add("@仓位", "仓位");
                Cmd.Parameters["@仓位"].SourceColumn = dt.Columns["仓位"].ColumnName;
                
                Cmd.Parameters.Add("@唛头", "唛头");
                Cmd.Parameters["@唛头"].SourceColumn = dt.Columns["唛头"].ColumnName;     da.InsertCommand = Cmd;
                da.UpdateCommand = Cmd;
                da.Update(dt);
      
            }
        }
    }
      

  14.   

    string   sql   =   "select   *   from   [sheet1$] ";   --sheet1-指excel文件的sheet名
      

  15.   

    最近作了一个导入职位的(excel->access),仅供参考:
    private DataTable GetDataFromExcel(string filepath_p,string sheetName_p)
    {
    System.Data.DataTable dt = new DataTable();
    string strConn;
    try
    {
    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source="+filepath_p +
    ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
    OleDbConnection conn = new OleDbConnection(strConn);
    OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM ["+sheetName_p+"$]", strConn);
    myCommand.Fill(dt);
    return dt;
    }
    catch(OleDbException ex)
    {
    throw new Exception("导入的文件为空或格式错误!"+ex.Message);
    //     return null;
    this.Cursor = System.Windows.Forms.Cursors.Arrow;
    }

    } //导入职位
    private void ImportDataFromZW(string dsdm_p)
    {
    #region 导入职位
    System.Data.DataTable dt = new DataTable();
    string filepath_p="zw.xls";
    string sqlstr;
    OleDbCommand com;
    try
    {
    dt = GetDataFromExcel(filepath_p,"zw");
    }
    catch(Exception ex)
    {
    throw new Exception(ex.Message);
    return;
    }
    if(System.IO.File.Exists(filepath_p)==false)
    return;
    int i=0;
    string zwdm,zw;
    for(i=0;i<dt.Rows.Count;i++)
    {
    zwdm = dt.Rows[i][0].ToString();
    if(zwdm.Substring(0,2) !=dsdm_p) continue;
    zw = dt.Rows[i][1].ToString(); try
    {
    sqlstr="insert into 职位表(职位代码,职位) values('"+zwdm+"','"+zw+"')";
    OleDbCommand com1=new OleDbCommand(sqlstr,this.dataio.con);
    if(dataio.con.State==System.Data.ConnectionState.Closed)
    dataio.con.Open();
    com1.ExecuteNonQuery();
    if(dataio.con.State==System.Data.ConnectionState.Open)
    dataio.con.Close();
    }
    catch(OleDbException ex)
    {
    throw new Exception("职位表添加数据错误!"+ex.Message);
    if(dataio.con.State==System.Data.ConnectionState.Open)
    dataio.con.Close();
    // return;
    }
    }
    #endregion
    }
      

  16.   

    以上方法太慢,且缺乏通用性,可以将excel直接作为一个表,利用sql语句直接将整个表插入到另一个数据库中,这样速度较快且通用