我开始了解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");
}
}
}
}
答案 0 :(得分:9)
Password
是reserved word。将字段名称括起来以避免混淆数据库引擎。
INSERT into Login (Username, [Password])
答案 1 :(得分:4)
如果您正在使用 数据库 ,那么这个答案将有所帮助,那么大多数情况下会接受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();
}
答案 2 :(得分:1)
并没有提供任何线索
是的,不幸的是你的代码忽略了所有这些线索。看一下你的异常处理程序:
catch (OleDbException ex)
{
MessageBox.Show(ex.Source);
conn.Close();
}
您正在检查的是异常的源。在这种情况下,它是“Microsoft Access数据库引擎”。您没有检查错误消息本身,堆栈跟踪或任何内部异常,或有关异常的任何有用的东西。
不要忽略该异常,它包含有关出错的信息以及原因。
有各种日志工具(NLog,log4net等)可以帮助您记录有关异常的有用信息。如果不这样做,你应该至少捕获异常消息,堆栈跟踪和任何内部异常。目前您忽略错误,这就是您无法解决错误的原因。
在调试器中,在catch
块中放置一个断点并检查异常的详细信息。你会发现它包含很多信息。
答案 3 :(得分:0)
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();
}
答案 4 :(得分:0)
我插入数据的代码不起作用。它没有显示任何错误,但是数据没有显示在我的数据库中。
公共局部类Form1:表单 { OleDbConnection连接=新的OleDbConnection(check.Properties.Settings.Default.KitchenConnectionString); 公共Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e)
{
}
private void btn_add_Click(object sender, EventArgs e)
{
OleDbDataAdapter items = new OleDbDataAdapter();
connection.Open();
OleDbCommand command = new OleDbCommand("insert into Sets(SetId, SetName, SetPassword) values('"+txt_id.Text+ "','" + txt_setname.Text + "','" + txt_password.Text + "');", connection);
command.CommandType = CommandType.Text;
command.ExecuteReader();
connection.Close();
MessageBox.Show("Insertd!");
}
}
答案 5 :(得分:-2)
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();
}