2015-10-06 151 views
3

我一直在努力。我試圖通過自定義程序將值添加到訪問數據庫。我沒有任何語法錯誤或任何可以看到錯誤的地方,但我是一個新手。任何幫助將非常感激。 我在那裏弄髒了一些髒代碼,但評論它。請幫忙!感謝球員和女球員。Visual Studio C#到MS Access連接失敗

我對AMD贏得10 的Visual Studio 2015年 訪問2016

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Data.OleDb; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class frmNewClient : Form 
    { 
     OleDbConnection connect = new OleDbConnection(); 


     public frmNewClient() 
     { 
      InitializeComponent(); 


     } 

     private void textBox3_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void cmdClientInput_Click(object sender, EventArgs e) 
     { 

     string CompanyName = txtCCOMPANYNAME.Text; 
     string ContactName = txtCCONTACTNAME.Text; 
     string Street = txtCSTREET.Text; 
     string City = txtCCITY.Text; 
     string State = txtCSTATE.Text; 
     string ZIP = txtCZIP.Text; 
     string Phone1 = txtCPHONE1.Text; 
     string Phone2 = txtCPHONE2.Text; 
     string Email = txtCEMAIL.Text; 
     string Notes = txtCNOTES.Text; 
     connect.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\lafiammadb.accdb;Persist Security Info=False"; 
     OleDbCommand cmd = new OleDbCommand("INSERT Into Clients(CompanyName, ContactName, Street, City, State, ZIP, Phone1, Phone2, Email, Notes)" + "values(@CompanyName, @ContactName, @Street, @City, @State, @ZIP, @Phone1, @Phone2, @Email, @Notes)", connect); 
     if (connect.State == ConnectionState.Open) 
     { 
      cmd.Parameters.Add("@CompanyName", OleDbType.Char, 20).Value = CompanyName; 
      cmd.Parameters.Add("@ContactName", OleDbType.Char, 20).Value = ContactName; 
      cmd.Parameters.Add("@Street", OleDbType.Char, 20).Value = Street; 
      cmd.Parameters.Add("@City", OleDbType.Char, 20).Value = City; 
      cmd.Parameters.Add("@State", OleDbType.Char, 20).Value = State; 
      cmd.Parameters.Add("@ZIP", OleDbType.Char, 20).Value = ZIP; 
      cmd.Parameters.Add("@Phone1", OleDbType.Char, 20).Value = Phone1; 
      cmd.Parameters.Add("@Phone2", OleDbType.Char, 20).Value = Phone2; 
      cmd.Parameters.Add("@Email", OleDbType.Char, 20).Value = Email; 
      cmd.Parameters.Add("@Notes", OleDbType.Char, 20).Value = Notes; 
      try 
      { 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("Data Added To Database"); 
       txtCCOMPANYNAME.Text = ""; 
       txtCCONTACTNAME.Text = ""; 
       txtCSTREET.Text = ""; 
       txtCCITY.Text = ""; 
       txtCSTATE.Text = ""; 
       txtCZIP.Text = ""; 
       txtCPHONE1.Text = ""; 
       txtCPHONE2.Text = ""; 
       txtCEMAIL.Text = ""; 
       txtCNOTES.Text = ""; 

      } 
      catch (Exception expe) 
      { 
       MessageBox.Show(expe.Source); 
       connect.Close(); 
      } 

     } 
     else 
     { 
      MessageBox.Show("Connection Failed"); 

     } 
     //connect.Open(); 


     //OleDbCommand cmd = new OleDbCommand(q); 
     //cmd.Parameters.AddWithValue("@CompanyName", CompanyName); 
     //cmd.Parameters.AddWithValue("@ContactName", ContactName); 
     //cmd.Parameters.AddWithValue("@Street", Street); 
     //cmd.Parameters.AddWithValue("@City", City); 
     //cmd.Parameters.AddWithValue("@ZIP", ZIP); 
     //cmd.Parameters.AddWithValue("@Phone1", Phone1); 
     //cmd.Parameters.AddWithValue("@Phone2", Phone2); 
     //cmd.Parameters.AddWithValue("@Email", Email); 
     //cmd.Parameters.AddWithValue("@Notes", Notes); 
     //cmd.ExecuteNonQuery(); 


     //OleDbCommand CmdSql = new OleDbCommand("Insert into [clients](Company Name, Contact Name, Street, City, State, Zip, Phone1, Phone2, Email, Notes) 



    } 
} 
} 
+0

你會得到什麼錯誤? – Slappywag

+0

@Slappywag: - '我沒有任何語法錯誤或任何可以看到錯誤的東西' –

回答

2

問題就在這裏:

if (connect.State == ConnectionState.Open) 

您所檢查的連接是打開或沒有,但在不點你實際上打開你的連接。在檢查之前,您需要登錄Open。你可以嘗試這樣的:

if (connect.State == ConnectionState.Closed) 
{ 
    connect.Open(); 
} 

在一個側面說明:

與連接處理時,可以考慮使用using statament爲好。

+0

非常感謝您的幫助。 –

+0

@WillieAaronWalkerIII: - 不客氣! –

0

這條線給你提問if (connect.State == ConnectionState.Open)。你真的想要做的是檢查,如果連接被關閉,然後打開它,以便:

if (connect.State == ConnectionState.Closed) 
{ 
    connect.Open(); 
    //Do Some work 
} 

不過,我會建議你做使用你using阻止此將確保產品的正確處理。

MSDN

爲了確保連接總是關閉,打開一個使用塊的內部的連接,如圖所示在下面的代碼片段。這樣做可確保在代碼退出塊時連接會自動關閉。

using(OleDbConnection connect = new OleDbConnection(connectionString)) 
{ 
    connect.Open(); 
    //Do some work 
}// Here it will automatically call Dispose(); 

由於OleDbConnection類實現了IDisposable。所以你可以直接使用Dispose()方法,不需要撥打電話connect.Close();