【问题标题】:C# And Access 2007: Insert & Update functions not working properly?C# 和 Access 2007:插入和更新功能无法正常工作?
【发布时间】:2013-03-08 05:49:23
【问题描述】:

我有两个功能。 Soner Gönül提供的插入函数(谢谢),......

表名学生

数据库

     `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 和 VS 2010。我想知道这是否是问题所在。如果是,那么它可能不值得麻烦。我已经下载了 AccessDatabaseEngine 但它是 32 位的,所以我不知道?如果我使用 SQL Server 而不是 Access,可能会让我的生活更轻松。

我认为这个问题被问过太多次了。

【问题讨论】:

  • 每次运行程序时是否都将数据库复制到数据目录中?
  • @PhoenixReborn - 这两个函数不应该这样做还是我不明白?
  • 不,该功能不应该也不应该这样做。从您的描述中听起来,您每次运行程序时都设置了 Visual Studio 以将数据库复制到数据目录。所以看起来数据正在消失,而实际上它只是一个新的副本。

标签: c# ms-access-2007


【解决方案1】:

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

在解决方案资源管理器中,找到您的数据库并指定 Build Action = NoneCopy to Output Directory = 不要复制

您的数据库应位于bin 文件夹以外的文件夹中,否则每次启动项目时,您都会将与项目中相同的数据库复制到输出文件夹中。

相反,将数据库定位到其他位置(C:\Program Files (x86)\Common Files 或其他位置)并连接到它。

您的项目可能还有其他问题,但这是一个让我很头疼的大问题。

【讨论】:

  • 感谢您的回复并为给您带来的不便深表歉意。
  • 很高兴为您提供帮助。我认为你得到了反对票,因为人们不明白你在问什么。一定要爱人,对吧?
  • 这很尴尬。我使用了错误的连接字符串。我应该使用 Access 2002-2003 版本时使用的是 Access 2007。
  • 哈哈 - 啊,没关系。至少你明白了。不过,请确保不要使用 bin 文件夹中的数据库,否则每次重建都会覆盖它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 2018-08-20
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多