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)
}
}
}
问题就在这里:
if (connect.State == ConnectionState.Open)
您所检查的连接是打开或没有,但在不点你实际上打开你的连接。在检查之前,您需要登录Open
。你可以尝试这样的:
if (connect.State == ConnectionState.Closed)
{
connect.Open();
}
在一个侧面说明:
与连接处理时,可以考虑使用using
statament为好。
非常感谢您的帮助。 –
@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();
你会得到什么错误? – Slappywag
@Slappywag: - '我没有任何语法错误或任何可以看到错误的东西' –