2012-09-27 61 views
2

我有一個C#的Windows應用程序,我試圖插入數據(已由用戶輸入)到訪問數據庫。我沒有收到任何錯誤,但是它沒有輸入數據。任何想法?記錄沒有插入到訪問數據庫中

 string sqlInsert = "insert into assessment (id) values (@id)"; 

     using (OleDbConnection conn = new OleDbConnection(dsn)) 
     { 

      OleDbCommand cmd = new OleDbCommand(sqlInsert, conn); 

      cmd.Parameters.Add("@id", OleDbType.VarChar, 50).Value = iDTextBox.Text.Trim().Length != null ? storedID.Trim() : ""; 

      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      conn.Close(); 
     } 

id的數據類型是Text

編輯: 連接字符串存儲在app.config中爲:

<add name="conn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\CADSCUPP.mdb" providerName="System.Data.OleDb"/> 

,並在代碼中訪問:

private string dsn = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString; 

如果我手動(未插入記錄,通過後面的代碼的代碼)我可以讀取程序中其他地方的記錄,以便連接起作用。

+0

OleDbType.VarChar?這個ID是不是一個數字? – Fionnuala

+0

不,不是號碼 – peroija

+2

你怎麼知道記錄沒有被寫入?你是從ASP.NET查詢數據庫還是查看Access中的表來驗證它?您可能會檢查ASP.NET和VS是否在開發計算機上的其他位置創建了數據庫副本。我不知道ASP.NET會發生這種情況,但我發現Win7上使用Access dbs的WinForms應用程序會發生這種情況。 –

回答

2

的Windows 7已經知道,使Access數據庫的副本在其他地方,編譯和運行的WinForms應用程序時。我不知道它是否與ASP.NET應用程序一起使用,但這是可能的。可能值得驗證的是,應用程序訪問的數據庫位於您認爲的位置。

+0

結果在調試中的幾個文件夾它重新創建數據庫並將其保存在那裏 – peroija

+0

是的,它將其複製到可執行文件所在的bin文件夾中,並且在每個構建文件中將其替換爲解決方案文件夾中的複製文件,因此,如果不生成並執行exe文件,則可以看到數據。 – Yawar

0

您可以驗證您的字符串連接是否正確

樣品:

connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=yourdatabasename.mdb;" 
1

用問號代替@在SQL文本。參數名稱與訪問無關。只有訂單纔算。我在很長一段時間內還沒有使用過訪問 - 但這是我記憶中的一件事,它曾經讓我發瘋。使用Access時,參數名稱無關緊要。

string sqlInsert = "insert into assessment (id) values (?)"; 

     using (OleDbConnection conn = new OleDbConnection(dsn)) 
     { 

      OleDbCommand cmd = new OleDbCommand(sqlInsert, conn); 

      cmd.Parameters.Add("?", OleDbType.VarChar, 50).Value = iDTextBox.Text.Trim().Length == 0 ? storedID.Trim() : ""; 

      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      conn.Close(); 
     } 
+0

同樣的結果,沒有在數據庫中,沒有錯誤:( – peroija

+0

@peroija - 請參閱我的更新 - 表評估是什麼樣子? –

0

我想你錯過了提及命令類型。添加另一行如下:

OleDbCommand cmd = new OleDbCommand(sqlInsert, conn); 
cmd.CommandType = CommandType.Text;