连接到Access数据库

时间:2017-02-20 11:37:05

标签: c# database access

我正在尝试连接数据库文件“crepeDB.accdb”

当我通过数据连接添加它时,并且当我拖动任何表以任何形式显示为数据网格时工作正常但是当我尝试连接到数据库以插入数据时它给了我这个错误:

  

附加信息中出现未处理的“System.NotImplementedException”类型异常:未实现方法或操作。

我正在使用的代码如下:

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=|DataDirectory|\\crepeDB.accdb;");

conn.Open();
string query = "insert into Sales (Sdate,SQuantity) values ('" + dateTimePicker1.Value + "','" + textBox9.Text + "')";
OleDbCommand cmd = new OleDbCommand(query, conn);
cmd.ExecuteNonQuery();

这是我在项目中需要做的最后一件事,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

不要为连接它们的字段传递值以形成命令,而是使用参数。

int quantity;
if(!Int32.TryParse(textBox9.Text, out quantity))
     MessageBox.Show("Invalid number");
else
{
    using(OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data source=|DataDirectory|\\crepeDB.accdb;"))
    {    
        conn.Open();
        string query = @"insert into Sales (Sdate,SQuantity) 
                         values (@date, @qta)";
        OleDbCommand cmd = new OleDbCommand(query, conn);
        cmd.Parameters.Add("@date", OleDbType.Date).Value =  dateTimePicker1.Value;
        cmd.Parameters.Add("@qta", OleDbType.Integer).Value = quantity;
        cmd.ExecuteNonQuery();
    }
}

这样做更好,因为您不要求其他人将您的值从字符串转换为正确的数据类型。当传递的字符串与数据库引擎如何解释此字符串之间存在某种不匹配时,这种自动转换(特别是日期)会引起问题

N.B我假设Sdate是DateTime类型的字段,SQuantity是MS-Access中Integer类型的字段。如果没有,那么您可以将OleDbType Int32.TryParse更改为正确的匹配类型

答案 1 :(得分:0)

基本上是这样的。 。 。

con.Open();
SqlCommand cmd = new SqlCommand(@"insert into tbl_insert values(@name,@email,@add)", con);
cmd.Parameters.AddWithValue("@name", txtname.Text);
cmd.Parameters.AddWithValue("@email", txtemail.Text);
cmd.Parameters.AddWithValue("@add", txtadd.Text);
cmd.ExecuteNonQuery();
con.Close();