解决方案 »

  1.   

    应该不会,你数据库里查询一下,
    你最好写个函数public void insertdata(string s1, string s2, string s3)//插入数据库  
         {  
             SqlConnection con = new SqlConnection("Data Source=10.168.1.5;Initial Catalog=data;User ID=sa;password=sa;Integrated Security=False");  
             con.Open();  
             SqlCommand cmd = new SqlCommand(string.Format("select Count(*) from newtable where a= '{0}'", s1), con);  
             if ((int)cmd.ExecuteScalar() > 0)  
             {  
                 listBox1.Items.Add(s1 + " 数据已经存在");  
             }  
             else  
             {  
                 string sql = "insert into newtable(a,b,c) values('" + s1 + "','" + s2 + "','" + s3 +"')";  
                 cmd.CommandText = sql;  
                 cmd.ExecuteNonQuery();  
                 listBox1.Items.Add(s1 + " 成功添加");  
             }  
             cmd.Dispose();  
             con.Close();  
         }  
                 for (int i = 0; i < dt.Rows.Count; i++)
                            {
                               insertdata(.....);
                            }
      

  2.   

    打log日志,把sql直接打出来就知道怎么回事了
      

  3.   

    dt.Rows.Count的记录熟是对的,单步调试的时候导出的access数据库记录也是对的,但是直接运行就丢失了第一条记录
      

  4.   

    没有。按楼上说的,每执行一次将记录添加到listbox,第一条记录也是在listbox中的,但是access中不显示
      

  5.   

    打日志和添加到listbox是一样的啊!都是执行插入的
      

  6.   

    一条一条的循环插入?
    //dt存的是你要插入的数据
            public void insertdata(DataTable dt)//插入数据库  
            {
                using (SqlConnection con = new SqlConnection("Data Source=10.168.1.5;Initial Catalog=data;User ID=sa;password=sa;Integrated Security=False"))
                {
                    using (var t = con.BeginTransaction()) //事物
                    {
                        try
                        {
                            con.Open();
                            SqlDataAdapter sda = new SqlDataAdapter("select * from 地力评价指标 where 1=2", con);
                            SqlCommandBuilder sdcb = new SqlCommandBuilder(sda);
                            var dtInsert = new DataTable();
                            sda.Fill(dtInsert);                        DataTable dt = new DataTable();//此处的dt是你要插入到地理评价指标表的数据来源
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                var dr = dtInsert.NewRow();
                                dr["类型名称"] = CheckString(dt.Rows[i][1].ToString());
                                dr["字段代码"] = dt.Rows[i][2].ToString();
                                dr[""] = CheckString(dt.Rows[i][3].ToString());
                                //string sql = "insert into 地力评价指标(类型名称,字段代码,要素名称) values ('" + CheckString(dt.Rows[i][1].ToString()) + "','" + dt.Rows[i][2].ToString() + "','" + CheckString(dt.Rows[i][3].ToString()) + "')";
                                dtInsert.Rows.Add(dr);
                            }
                            sda.Update(dtInsert);
                            t.Commit();
                        }
                        catch (Exception)
                        {
                            //异常处理
                            t.Rollback();
                        }
                        finally
                        {
                            //todo
                        }
                    }
                }
                
            }  
      

  7.   

    失误,应该使用OleDbConnection、OleDbDataAdapter等,写成了SqlServer的了
      

  8.   

    也是单步调试正确,直接运行access中第一条数据丢失
      

  9.   

    加一个 事务 最后一起comit 试试看
      

  10.   

    加异常,查看Message信息。出现什么问题...
      

  11.   

    怎样一起commit,能给个代码吗?谢谢
      

  12.   


    sql = "insert into 地力评价指标(类型名称,字段代码,要素名称) values ('" +  CheckString(dt.Rows[i][1].ToString()) + "','" + dt.Rows[i][2].ToString() + "','" +  CheckString(dt.Rows[i][3].ToString()) + "')";
    /*
    // 1 - 换成
    sql = "insert into 地力评价指标(类型名称,字段代码,要素名称) values ('" +  CheckString(dt.Rows[i][0].ToString()) + "','" + dt.Rows[i][1].ToString() + "','" +  CheckString(dt.Rows[i][2].ToString()) + "')";// 2 - 换成
    sql = "insert into 地力评价指标(类型名称,字段代码,要素名称) values ('" +  CheckString(dt.Rows[i][“类型名称”].ToString()) + "','" + dt.Rows[i][“字段代码”].ToString() + "','" +  CheckString(dt.Rows[i][“要素名称”].ToString()) + "')";//3 - 调试过程中将每条Sql语句复制到查询分析器中,再一起运行,看有什么错误提示
    */
      

  13.   

    会不会是我vs设置过哪里呢?我试过了,直接插一条记录直接运行插不进去,单步调试可以插入到access数据表表格中
      

  14.   

    唉~~不说插入的问题,是新建的access数据库的问题现在新问题出现了,新建的access数据库有时能关闭,有时不能关闭,产生ldb锁定,求帮忙
      DateTime dtime = DateTime.Now;
                string dbname = @"d:\数字字典" + dtime.Hour.ToString() + dtime.Minute.ToString() + dtime.Second.ToString() + dtime.Millisecond.ToString() + ".mdb";
                string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbname + " ;Jet OLEDB:Database Password=123456;Jet OLEDB:Engine Type=5";            ADOX.Catalog access = new ADOX.Catalog();
                try
                {
                    access.Create(conn);
                }
                catch
                { }            ADODB.Connection cn = new ADODB.Connection();
                cn.Open(conn, null, null, -1);
                access.ActiveConnection = cn;            ADOX.Table table = new ADOX.Table();
                //table.ParentCatalog = access;
                table.Name = "字段类别";            ADOX.Column column = new ADOX.Column();
                column.ParentCatalog = access;
                column.Type = ADOX.DataTypeEnum.adInteger;
                column.Name = "id";
                column.DefinedSize = 9;
                //column.Properties["jet OLEDB:Allow Zero Length"].Value = false;
                column.Properties["AutoIncrement"].Value = true;
                table.Columns.Append(column, ADOX.DataTypeEnum.adInteger,0);            table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary,"id", "", "");
                table.Columns.Append("类别代码", ADOX.DataTypeEnum.adVarWChar, 50);
                table.Columns.Append("类别名称", ADOX.DataTypeEnum.adVarWChar, 50);
                //table.Columns.Append("要素名称", ADOX.DataTypeEnum.adVarWChar, 50);
                try
                {
                    access.Tables.Append(table);
                }
                catch
                { }
                finally
                {
                    table = null;
                    (access.ActiveConnection as ADODB.Connection).Close();
                   
                    access.ActiveConnection = null;
                    access = null;
      
                }
      

  15.   

    System.Runtime.InteropServices.Marshal.ReleaseComObject(table );
        System.Runtime.InteropServices.Marshal.ReleaseComObject(access);
        table = null;
        access = null;
        GC.WaitForPendingFinalizers();
        GC.Collect();
      

  16.   

    还是没有用不能关闭,我是建的多个表,应该不用没建完一个表就要关闭一次table和access吧?
      

  17.   

    最后一次关闭啊
    使用使用的对象就进行
    System.Runtime.InteropServices.Marshal.ReleaseComObject