Visual Studio C#到MS Access连接失败

Visual Studio C#到MS Access连接失败

问题描述:

我一直在努力。我试图通过自定义程序将值添加到访问数据库。我没有任何语法错误或任何可以看到错误的地方,但我是一个新手。任何帮助将非常感激。 我在那里弄脏了一些脏代码,但评论它。请帮忙!感谢球员和女球员。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: - '我没有任何语法错误或任何可以看到错误的东西' –

问题就在这里:

if (connect.State == ConnectionState.Open) 

您所检查的连接是打开或没有,但在不点你实际上打开你的连接。在检查之前,您需要登录Open。你可以尝试这样的:

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

在一个侧面说明:

与连接处理时,可以考虑使用using statament为好。

+0

非常感谢您的帮助。 –

+0

@WillieAaronWalkerIII: - 不客气! –

这条线给你提问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();