C#将表单中的数据插入到访问数据库中

我开始学习C#并且在使用单击按钮时,已经无法将文本框中的信息插入Access数据库。

我得到的问题是在添加过程中。 代码执行Try... Catch部分,然后返回错误说“Microsoft Access数据库引擎”,并没有提供任何线索。

这是代码:

 namespace WindowsFormsApplication1 { public partial class FormNewUser : Form { public FormNewUser() { InitializeComponent(); } private void BTNSave_Click(object sender, EventArgs e) { OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\kenny\Documents\Visual Studio 2010\Projects\Copy Cegees\Cegees\Cegees\Login.accdb"; String Username = TEXTNewUser.Text; String Password = TEXTNewPass.Text; OleDbCommand cmd = new OleDbCommand("INSERT into Login (Username, Password) Values(@Username, @Password)"); cmd.Connection = conn; conn.Open(); if (conn.State == ConnectionState.Open) { cmd.Parameters.Add("@Username", OleDbType.VarChar).Value = Username; cmd.Parameters.Add("@Password", OleDbType.VarChar).Value = Password; try { cmd.ExecuteNonQuery(); MessageBox.Show("Data Added"); conn.Close(); } catch (OleDbException ex) { MessageBox.Show(ex.Source); conn.Close(); } } else { MessageBox.Show("Connection Failed"); } } } } 

Password是保留字 。 将字段名称括起来以避免混淆数据库引擎。

 INSERT into Login (Username, [Password]) 

这个答案将有所帮助,如果您正在使用数据库,那么主要是借助try-catch块语句,这将有助于指导您的代码。 在这里,我向您展示如何使用按钮单击事件在数据库中插入一些值。

  private void button2_Click(object sender, EventArgs e) { System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(); conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + @"Data source= C:\Users\pir fahim shah\Documents\TravelAgency.accdb"; try { conn.Open(); String ticketno=textBox1.Text.ToString(); String Purchaseprice=textBox2.Text.ToString(); String sellprice=textBox3.Text.ToString(); String my_querry = "INSERT INTO Table1(TicketNo,Sellprice,Purchaseprice)VALUES('"+ticketno+"','"+sellprice+"','"+Purchaseprice+"')"; OleDbCommand cmd = new OleDbCommand(my_querry, conn); cmd.ExecuteNonQuery(); MessageBox.Show("Data saved successfuly...!"); } catch (Exception ex) { MessageBox.Show("Failed due to"+ex.Message); } finally { conn.Close(); } 

并没有提供任何线索

是的,不幸的是你的代码忽略了所有这些线索。 看看你的exception处理程序:

 catch (OleDbException ex) { MessageBox.Show(ex.Source); conn.Close(); } 

您正在检查的是exception的来源 。 在这种情况下,它是“Microsoft Access数据库引擎”。 您没有检查错误消息本身,堆栈跟踪,任何内部exception,或有关exception的任何有用的东西

不要忽略该exception,它包含有关出错的信息以及原因。

有各种日志工具(NLog,log4net等)可以帮助您记录有关exception的有用信息。 如果做不到这一点,您至少应该捕获exception消息,堆栈跟踪和任何内部exception。 目前您忽略了错误,这就是您无法解决错误的原因。

在调试器中,在catch块中放置一个断点并检查exception的详细信息。 你会发现它包含很多信息。

  private void Add_Click(object sender, EventArgs e) { OleDbConnection con = new OleDbConnection(@ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\HP\Desktop\DS Project.mdb"); OleDbCommand cmd = con.CreateCommand(); con.Open(); cmd.CommandText = "Insert into DSPro (Playlist) values('" + textBox1.Text + "')"; cmd.ExecuteNonQuery(); MessageBox.Show("Record Submitted", "Congrats"); con.Close(); } 
  private void addToolStripMenuItem_Click(object sender, EventArgs e) { Form2 klass = new Form2(); klass.ShowDialog(); string my_querry = "INSERT INTO test(Sname,Ssurname,SNumber,SDNP,Sexam)VALUES('" + klass.getName() + "','" + klass.getSurname() + "','" + klass.getNumber() + "','" + klass.getDNP() + "','" + klass.getExam() + "')"; dbconn = new OleDbConnection(conn + dbfile); dbconn.Open(); try { OleDbCommand cmd = new OleDbCommand(my_querry, dbconn); cmd.ExecuteNonQuery(); MessageBox.Show("success...."); } catch(Exception ex) { MessageBox.Show(ex.Message); } dbconn.Close(); }