添加到数据库 oledb c#
adding to database oledb c#
搜索了大约一个小时后,似乎这是使用 oledb 库将记录插入访问数据库的正确方法,但它对我不起作用,帮助...
InitializeComponent();
System.Data.OleDb.OleDbConnection conn = new
System.Data.OleDb.OleDbConnection();
// TODO: Modify the connection string and include any
// additional required properties for your database.
conn.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = \crd-a555-015.occ.local\c$\Users\james.piper\Documents\Visual Studio 2015\Projects\Project V1\Project Database.accdb";
try
{
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO Work_Done (employee,client,project,task,hours)" + " VALUES (@employee,@client,@project,@task,@hours)";
cmd.Parameters.AddWithValue("@employee", user.employee);
cmd.Parameters.AddWithValue("@client", listBox1.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@project", listBox2.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@task", listBox3.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@hours", listBox4.SelectedItem.ToString());
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show("sql insert fail");
}
我会这样写这段代码:
var connectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = \crd-a555-015.occ.local\c$\Users\james.piper\Documents\Visual Studio 2015\Projects\Project V1\Project Database.accdb";
var query = "INSERT INTO Work_Done (employee,client,project,task,hours) VALUES (@employee,@client,@project,@task,@hours)";
using (var conn = new OleDbConnection(connectionString))
{
using(var cmd = new OleDbCommand(query, conn))
{
// No need to specifiy command type, since CommandType.Text is the default
// I'm assuming, of course, your parameter data types. You should change them if my assumptions are wrong.
cmd.Parameters.Add("@employee", OleDbType.Integer).Value = user.employee;
cmd.Parameters.Add("@client", OleDbType.Integer).Value = Convert.ToInt32(listBox1.SelectedItem);
cmd.Parameters.Add("@project", OleDbType.Integer).Value = Convert.ToInt32(listBox2.SelectedItem);
cmd.Parameters.Add("@task", OleDbType.Integer).Value = Convert.ToInt32(listBox3.SelectedItem);
cmd.Parameters.Add("@hours", OleDbType.Integer).Value = Convert.ToInt32(listBox4.SelectedItem);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show($"sql insert fail: {ex}");
}
}
}
主要变化如下:
- 对每个实现
IDisposable
接口的 class 实例使用 Using
语句。
- 使用带参数的构造函数使代码更短(并且更具可读性,恕我直言)。
- 请注意,OleDbCommand 的构造函数也有 OleDbConnection 对象。在您的代码中,您没有指定与命令的活动连接。
- 使用
Add
而不是 AddWithValue
添加参数。阅读 this blog post 找出原因。
搜索了大约一个小时后,似乎这是使用 oledb 库将记录插入访问数据库的正确方法,但它对我不起作用,帮助...
InitializeComponent();
System.Data.OleDb.OleDbConnection conn = new
System.Data.OleDb.OleDbConnection();
// TODO: Modify the connection string and include any
// additional required properties for your database.
conn.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = \crd-a555-015.occ.local\c$\Users\james.piper\Documents\Visual Studio 2015\Projects\Project V1\Project Database.accdb";
try
{
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO Work_Done (employee,client,project,task,hours)" + " VALUES (@employee,@client,@project,@task,@hours)";
cmd.Parameters.AddWithValue("@employee", user.employee);
cmd.Parameters.AddWithValue("@client", listBox1.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@project", listBox2.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@task", listBox3.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@hours", listBox4.SelectedItem.ToString());
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show("sql insert fail");
}
我会这样写这段代码:
var connectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = \crd-a555-015.occ.local\c$\Users\james.piper\Documents\Visual Studio 2015\Projects\Project V1\Project Database.accdb";
var query = "INSERT INTO Work_Done (employee,client,project,task,hours) VALUES (@employee,@client,@project,@task,@hours)";
using (var conn = new OleDbConnection(connectionString))
{
using(var cmd = new OleDbCommand(query, conn))
{
// No need to specifiy command type, since CommandType.Text is the default
// I'm assuming, of course, your parameter data types. You should change them if my assumptions are wrong.
cmd.Parameters.Add("@employee", OleDbType.Integer).Value = user.employee;
cmd.Parameters.Add("@client", OleDbType.Integer).Value = Convert.ToInt32(listBox1.SelectedItem);
cmd.Parameters.Add("@project", OleDbType.Integer).Value = Convert.ToInt32(listBox2.SelectedItem);
cmd.Parameters.Add("@task", OleDbType.Integer).Value = Convert.ToInt32(listBox3.SelectedItem);
cmd.Parameters.Add("@hours", OleDbType.Integer).Value = Convert.ToInt32(listBox4.SelectedItem);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show($"sql insert fail: {ex}");
}
}
}
主要变化如下:
- 对每个实现
IDisposable
接口的 class 实例使用Using
语句。 - 使用带参数的构造函数使代码更短(并且更具可读性,恕我直言)。
- 请注意,OleDbCommand 的构造函数也有 OleDbConnection 对象。在您的代码中,您没有指定与命令的活动连接。
- 使用
Add
而不是AddWithValue
添加参数。阅读 this blog post 找出原因。