C#将数据插入Access数据库
我是编程新手,在将表单中的数据插入数据库时遇到问题。如果单击该按钮,它将进入else语句,其中显示“连接失败” 这是我的密码:C#将数据插入Access数据库,c#,C#,我是编程新手,在将表单中的数据插入数据库时遇到问题。如果单击该按钮,它将进入else语句,其中显示“连接失败” 这是我的密码: private void buttonAddrecord_Click(object sender, EventArgs e) { OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = (@"Provider= Microsoft.ACE.OLEDB.12.0;Data
private void buttonAddrecord_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = (@"Provider= Microsoft.ACE.OLEDB.12.0;Data Source=
C:\Users\pc\Documents\Visual Studio 2015\Projects\GamefarmDB\GamefarmDB\Gamefarm.accdb;
User ID = admin;");
String WingbandNumber = wingbandnumberTextbox.Text;
String DateOfHatch = dateofhatchTextbox.Text;
String Markings = markingsTextbox.Text;
String Bloodline = bloodlineTextbox.Text;
String Broodhen = broodhenTextbox.Text;
String Broodcock = broodcockTextbox.Text;
OleDbCommand cmd = new OleDbCommand("INSERT into List (WingbandNumber,
DateOfHatch, Markings, Bloodline, Broodhen, Broodcock)
Values(@WingbandNumber, @DateOfHatch, @Markings, @Bloodline,
@Broodhen, @Broodcock)");
cmd.Connection = conn;
if (conn.State == ConnectionState.Open)
{
cmd.Parameters.Add("@WingbandNumber", OleDbType.Numeric).Value = WingbandNumber;
cmd.Parameters.Add("@DateOfHatch", OleDbType.LongVarChar).Value = DateOfHatch;
cmd.Parameters.Add("@Markings", OleDbType.LongVarChar).Value = Markings;
cmd.Parameters.Add("@Bloodline", OleDbType.LongVarChar).Value = Bloodline;
cmd.Parameters.Add("@Broodhen", OleDbType.LongVarChar).Value = Broodhen;
cmd.Parameters.Add("@Broodcock", OleDbType.LongVarChar).Value = Broodcock;
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("Data Added");
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Source);
conn.Close();
}
}
else
{
MessageBox.Show("Connection Failed");
}
}
我同意你应该使用conn.Open();您还应该在if(conn.State==ConnectionState.Open)之前放置一个try-catch,这样您的代码应该如下所示
.
.
.
cmd.Connection = conn;
try
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
.
.
.
else
{
MessageBox.Show("Connection Failed");
}
catch (Exception ex)
{
MessageBox.Show(ex.toString());
conn.Close();
}
因此,它将为您提供无法连接的确切异常,如果整个过程出现任何问题,它也将为您提供异常。命令对象需要打开连接。因此,您应该在执行命令之前打开连接您只需要在实际使用连接对象之前打开它 因此,您的代码将如下所示
private void buttonAddrecord_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = (@"Provider= Microsoft.ACE.OLEDB.12.0;Data Source =C:\Users\pc\Documents\Visual Studio 2015\Projects\GamefarmDB\GamefarmDB\Gamefarm.accdb;User ID = admin;");
String WingbandNumber = wingbandnumberTextbox.Text;
String DateOfHatch = dateofhatchTextbox.Text;
String Markings = markingsTextbox.Text;
String Bloodline = bloodlineTextbox.Text;
String Broodhen = broodhenTextbox.Text;
String Broodcock = broodcockTextbox.Text;
OleDbCommand cmd = new OleDbCommand("INSERT into List (WingbandNumber, DateOfHatch, Markings, Bloodline, Broodhen, Broodcock) Values(@WingbandNumber, @DateOfHatch, @Markings, @Bloodline, @Broodhen, @Broodcock)");
cmd.Connection = conn;
conn.Open(); // To Open Connection
if (conn.State == ConnectionState.Open)
{
cmd.Parameters.Add("@WingbandNumber", OleDbType.Numeric).Value = WingbandNumber;
cmd.Parameters.Add("@DateOfHatch", OleDbType.LongVarChar).Value = DateOfHatch;
cmd.Parameters.Add("@Markings", OleDbType.LongVarChar).Value = Markings;
cmd.Parameters.Add("@Bloodline", OleDbType.LongVarChar).Value = Bloodline;
cmd.Parameters.Add("@Broodhen", OleDbType.LongVarChar).Value = Broodhen;
cmd.Parameters.Add("@Broodcock", OleDbType.LongVarChar).Value = Broodcock;
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("Data Added");
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Source);
conn.Close();
}
}
else
{
MessageBox.Show("Connection Failed");
}
}
我不确定我是否看到一个接头开着;将其添加到If子句之前,并检查是否需要打开连接才能使用它。在“if”条件之前添加“conn.Open()。
OleDbCommand
实现。我将使用(var con=new OleDbConnection(consting)){con.Open()使用重新编译;/…
。即使在使用代码块中发生错误,使用程序也会确保连接正确处理/关闭。您好,非常感谢您的帮助,在连接字符串中,我刚刚添加了密码,在if语句之前,我添加了“conn.Open();”,并且成功了!