当前位置: 代码迷 >> C# >> 生手学习c#操作access
  详细解决方案

生手学习c#操作access

热度:81   发布时间:2016-05-05 03:51:30.0
新手学习c#操作access
照着网上的例子做了一个
1。创建mdb文件
2。为mdb文件创建表table
3。往table里面添加字段
4。往table里面添加数据

但打开生成的mdb文件,最后发现,第一行的数据总是不显示如下图





而正常完全显示应该是下图:



我单步调试,生成的能显示完全。
我就在里面加了个sleep(1000),发现也可以生成的能显示完全

并且只能将sleep加在下面这段代码的前后才管用:
            //建立连接   
            string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sec.mdb";
            OleDbConnection odcConnection = new OleDbConnection(strConn);
            odcConnection.Open();



求解答啊,新手,大神们不要笑话。该怎么改,弄了一晚上了。

具体代码如下:



  //第一步:创建数据库文件

  //1.创建一个数据库 catalog
 ADOX.Catalog catalog = new Catalog();
 catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sec.mdb;Jet OLEDB:Engine Type=5");



//第二步:创建表格并为表格添加字段

//1.为数据库 catalog 创建一张表table

            ADOX.TableClass table = new ADOX.TableClass();
            table.ParentCatalog = catalog;  //属于catalog
             table.Name = "systemTable";

//2.为table创建列 Columns(StuID,StuName,Stuage)

          //(1)第一列 :StuID   

             ADOX.ColumnClass col00 = new ADOX.ColumnClass();
             col00.ParentCatalog = catalog;  //属于catalog
             col00.Type = ADOX.DataTypeEnum.adInteger; //数据类型为正整型
             col00.Name = "StuID"; //第一列为 StuID
             col00.Properties["Jet OLEDB:Allow Zero Length"].Value = false; //允许0长度
             col00.Properties["AutoIncrement"].Value = true; //不允许自动增长

            //(2)第二列:StuName
            ADOX.ColumnClass col01 = new ADOX.ColumnClass();
            col01.ParentCatalog = catalog;
            col01.Type = ADOX.DataTypeEnum.adLongVarWChar;
            col01.Name = "StuName"; //第二列为 StuName
            col01.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
            col01.Properties["AutoIncrement"].Value = false; //(默认值)


              //(2)第三列:Stuage
            ADOX.ColumnClass col02 = new ADOX.ColumnClass();
            col02.ParentCatalog = catalog;
            col02.Name = "Stuage";
            col02.Type = ADOX.DataTypeEnum.adDouble;
            col02.Properties["Jet OLEDB:Allow Zero Length"].Value = false;


            //4.将Columns添加到table
            table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "StuID", "", "");
            table.Columns.Append(col00, ADOX.DataTypeEnum.adInteger, 0);
            table.Columns.Append(col01, ADOX.DataTypeEnum.adLongVarWChar, 25);         
            table.Columns.Append(col02, ADOX.DataTypeEnum.adDouble, 666);


            //5.将table添加到catalog 
            catalog.Tables.Append(table);


//第三步:为表格添加具体数据
    
//为三个字段添加内容

            //建立连接   
            string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sec.mdb";
            OleDbConnection odcConnection = new OleDbConnection(strConn);

            odcConnection.Open();

            Thread.Sleep(1000);

string sql01 = "insert into systemTable" + @" (StuName,Stuage) values" + @"('hu',11)";
OleDbCommand odCommand01 = new OleDbCommand(sql01, odcConnection);
odCommand01.ExecuteNonQuery();



string sql02 = "insert into systemTable" + @" (StuName,Stuage) values" + @"('sum',13)";
OleDbCommand odCommand02 = new OleDbCommand(sql02, odcConnection);
odCommand02.ExecuteNonQuery();

string sql03 = "insert into systemTable" + @" (StuName,Stuage) values" + @"('jam',14)";
OleDbCommand odCommand03 = new OleDbCommand(sql03, odcConnection);
odCommand03.ExecuteNonQuery();

//4.关闭连接
odcConnection.Close();

 //5.释放COM对象
System.Runtime.InteropServices.Marshal.ReleaseComObject(table);
System.Runtime.InteropServices.Marshal.ReleaseComObject(catalog);
table = null;
catalog = null;
GC.WaitForPendingFinalizers();
GC.Collect();


------解决思路----------------------
肉眼看不出原因!
这样,你在执行ExecuteNonQuery方法的时候,看影响行数是否为1,如果三条插入语句执行后影响行数都是1,说明是插入进去的。至于查看不到第一条,是另外的原因(我们再做分析)。先验证下上面的推论。


int result = odCommand01.ExecuteNonQuery();
if(result == 0)
{
//插入失败
}

------解决思路----------------------
代码没问题,可能是mdb文件修改后又被覆盖了
  相关解决方案