2013-03-07 42 views
0

我有两个功能。通过Soner Gönül(感谢)提供插入功能,......C#和Access 2007:插入和更新功能无法正常工作?

表名学生

数据库

 `Field Name Data Type 
    *StudentID Number 
     StudentName Text 
     StudentCNIC Text 
     StudentDOB Date/Time 

* PK

using System.Data.OleDb; 

private void Form1_Load(object sender, EventArgs e) 
    { 

     myCon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Access_and_CSharp.accdb"); 
     this.studentsTableAdapter.Fill(this.access_and_CSharpDataSet.Students); 
    } 

插入函数

private void Insertbtn_Click(object sender, EventArgs e) 
    { 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "INSERT INTO Students(StudentID, StudentName, StudentCNIC, StudentDOB) Values(@StudIDTxt, @StudNameTxt, @StudCNCITxt, @StudDOBTxt)"; 
     cmd.Parameters.AddWithValue("@StudIDTxt", StudIDTxt.Text); 
     cmd.Parameters.AddWithValue("@StudNameTxt", StudNameTxt.Text); 
     cmd.Parameters.AddWithValue("@StudCNCITxt", StudCNCITxt.Text); 
     cmd.Parameters.AddWithValue("@StudDOBTxt", StudDOBTxt.Text); 
     cmd.Connection=myCon; 
     myCon.Open(); 
     cmd.ExecuteNonQuery(); 
     myCon.Close(); 
    } 

这是更新功能

private void Updatebtn_Click(object sender, EventArgs e) 
    { 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "UPDATE [Students] set [StudentName] = ?, [StudentCNIC] = ?, [StudentDOB] = ? WHERE [StudentID] = ?"; 
     cmd.Parameters.AddWithValue("@StudIDTxt", StudIDTxt.Text); 
     cmd.Parameters.AddWithValue("@StudNameTxt", StudNameTxt.Text); 
     cmd.Parameters.AddWithValue("@StudCNCITxt", StudCNCITxt.Text); 
     cmd.Parameters.AddWithValue("@StudDOBTxt", StudDOBTxt.Text); 
     cmd.Connection = myCon; 
     myCon.Open(); 
     int rowsAffected = cmd.ExecuteNonQuery(); 
     myCon.Close(); 
    } 

问题1 - 当我使用插入功能,我可以在前端看到新的数据。但我无法在Access中看到新数据。其他时候,当我关闭应用程序并重新启动时,新记录不存在。如果我查看Access应用程序并关闭它,然后打开VS2010应用程序的新数据不存在。到底是怎么回事?

问题2 - 当我使用更新函数时,数据在应用程序第一次运行时保持更新。当应用程序关闭并再次运行时,情况并非如此。我哪里错了?

对于这两个问题,任何人都可以看到问题的位置在哪里?

在此先感谢

编辑 更新说我期待下面的网站,我已经错了。 http://www.c-sharpcorner.com/uploadfile/e628d9/inserting-retrieving-records-from-ms-access-2007-using-odbc/

更新 我的Windows 7,MS Access 2007年和2010年VS我想知道,如果这就是问题所在。如果是的话,这可能不值得麻烦。我已经下载了AccessDatabaseEngine,但它的32位,所以我不知道?如果我使用SQL Server而不是Access,可能会使我的生活更轻松。

我觉得这个问题被问过太多次了。

+0

您是否每次运行程序时都将数据库复制到数据目录中? – PhoenixReborn 2013-03-07 19:28:23

+0

@PhoenixReborn - 这两个功能不应该这样做还是我不明白? – bucketblast 2013-03-07 19:31:30

+0

否功能不应该也不会这样做。从你的描述中,听起来我觉得你每次运行你的程序时都有Visual Studio的设置来将你的数据库复制到你的数据目录中。所以看起来数据正在消失,实际上它只是一个新的副本。 – PhoenixReborn 2013-03-07 19:33:40

回答

1

对于初学者,请确保您的数据库不包含在您的项目构建中。

在解决方案资源管理器中,找到自己的数据库,并指定生成操作=无复制到输出目录=不要复制

screenshot

您的数据库应驻留比你bin的文件夹中文件夹,否则每次启动项目时,都会将项目中相同的数据库复制到输出文件夹。

而是将数据库找到其他位置(C:\Program Files (x86)\Common Files或其他位置)并连接到该位置。

您的项目可能存在其他问题,但这是一个突然冒出来的大问题。

+0

感谢您回复并对由此造成的不便表示歉意。 – bucketblast 2013-03-07 22:02:42

+0

很高兴为您提供帮助。我认为你得到了低估,因为人们不明白你在问什么。必须爱人们,对吧? – jp2code 2013-03-07 22:18:36

+1

这很尴尬。我使用了错误的连接字符串。当我应该使用Access 2002-2003版本时,我正在使用Access 2007。 – bucketblast 2013-03-09 14:15:54