生手学习c#操作access
新手学习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,说明是插入进去的。至于查看不到第一条,是另外的原因(我们再做分析)。先验证下上面的推论。
------解决思路----------------------
代码没问题,可能是mdb文件修改后又被覆盖了
照着网上的例子做了一个
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文件修改后又被覆盖了