2013-03-07 26 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