c#和ms-access数据库插入
本文关键字:插入 数据库 ms-access | 更新日期: 2023-09-27 18:05:05
我想通过保存按钮保存数据:
idbox (textbox) - empbox (combobox) - jobbox (combobox) - unitbox(combobox) -
destbox (combobox) - detectivebox (combobox) - statebox (combobox) -
investdate (datepicker) - investresult (textbox)
到表investinside相同的顺序:
id - emp - unit - job - dest - detective - state - investdate -investresult
我试过这个,没有错误,但没有保存在表中,当我检查....
我能知道这是什么原因吗?
这是我试过的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
namespace beta_2
{
public partial class Dentry_main : Form
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=beta2.mdb;");
OleDbDataAdapter da;
DataSet ds = new DataSet();
OleDbCommand com = new OleDbCommand();
string sql;
public Dentry_main()
{
InitializeComponent();
}
private void Dentry_main_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'beta2DataSet.stateinside' table. You can move, or remove it, as needed.
this.stateinsideTableAdapter.Fill(this.beta2DataSet.stateinside);
// TODO: This line of code loads data into the 'beta2DataSet.detectivestbl' table. You can move, or remove it, as needed.
this.detectivestblTableAdapter.Fill(this.beta2DataSet.detectivestbl);
// TODO: This line of code loads data into the 'beta2DataSet.departments' table. You can move, or remove it, as needed.
this.departmentsTableAdapter.Fill(this.beta2DataSet.departments);
// TODO: This line of code loads data into the 'beta2DataSet.units' table. You can move, or remove it, as needed.
this.unitsTableAdapter.Fill(this.beta2DataSet.units);
// TODO: This line of code loads data into the 'beta2DataSet.employees' table. You can move, or remove it, as needed.
this.employeesTableAdapter.Fill(this.beta2DataSet.employees);
}
private void button1_Click(object sender, EventArgs e)
{
conn.Open();
com.Connection = conn;
sql = "INSERT INTO investinside([id],[emp],[job],[unit],[dest],[detective],[state],[investdate],[investresult])VALUES(@id,@emp,@job,@unit,@dest,@detective,@state,@investdate,@investresult)";
com.CommandText = sql;
com.Parameters.Clear();
com.Parameters.AddWithValue("@id", idbox.Text);
com.Parameters.AddWithValue("@emp", empbox.Text);
com.Parameters.AddWithValue("@job", jobbox.Text);
com.Parameters.AddWithValue("@unit", unitbox.Text);
com.Parameters.AddWithValue("@dest", destbox.Text);
com.Parameters.AddWithValue("@detective", detectivebox.Text);
com.Parameters.AddWithValue("@state", statebox.Text);
com.Parameters.AddWithValue("@investdate", investdatebox.Text);
com.Parameters.AddWithValue("@investresult", investresultbox.Text);
com.ExecuteNonQuery();
MessageBox.Show("success");
conn.Close();
}
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
有很多方法可以创建ADO。让你更轻松。
如果你的表有主键,你应该看看ADO.Net的CommandBuilder特性。
如果是这样的话,向表中添加数据可以通过简单的DataTable.Rows.Add和DataAdapter来完成。更新
如果你想手动操作,你可以尝试手动操作。而不是:
"INSERT INTO investinside([id],[emp],[job],[unit],[dest],[detective],[state],[investdate],[investresult])VALUES(@id,@emp,@job,@unit,@dest,@detective,@state,@investdate,@investresult)"
试
string.Format("INSERT INTO investinside([id],[emp],[job],[unit],[dest],[detective],[state],[investdate],[investresult])VALUES('{0}','{1}',....)", idbox.Text, empbox.Text,...)
看起来你有一个本地DB连接。这就是我通常的联系方式……"服务器= USUALLY_YOYR_PC_NAME_CAPPITAL_LETTERS;数据库= database_name;集成安全= yes "
最后一部分集成安全很重要,不要忽略它。
建议:查看MSDN的ORM -实体框架教程,我更喜欢使用对象而不是SQL语句。而且我总是犯拼写错误。SQL不会原谅这些-在实体框架中你不能搞砸…