2

我正在开发一个 C# Windows 应用程序。我用过access数据库。当我从数据库中选择数据时,我正在获取数据,但是在插入数据时它没有被插入,也没有显示任何错误。

但是当我在 Access 中运行相同的插入查询时,它会被插入。这是我的代码:

    public void connCheck()
    {
        try
        {
            cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database\MyDatabase.mdb;Persist Security Info=True;Jet OLEDB:Database Password=2013");
            if (cn.State == ConnectionState.Closed)
                cn.Open();                
        }
        catch (Exception exp)
        {
            MessageBox.Show(exp.ToString());
        }
    }

    public bool ExecuteNonQuery()
    {
        try
        {
            connCheck();
            string sqlQuery = "INSERT INTO tblResult(ExamSet,SetId,FullMarks,ObtainedMarks,MarksPercentage,ElapsedTime,LastQIndex,CreatedDate,Completed)
            Values(1,27,'200.00',0,0,0,1,DATE(),'N')";
            cmd.CommandType = CommandType.Text;
            cmd.Connection = cn;
            cmd.CommandText = sqlQuery;                
            cmd.ExecuteNonQuery();
            return true;
        }
        catch(OleDbException ex)
        {
            ErrorMsg = ex.ToString();
            return false;
        }
        finally
        {
            cn.Close();
            cn.Dispose();
            cmd.Dispose();
        }
    }
4

4 回答 4

3

你没有定义你的 cmd..
添加这一行

    OledbCommand cmd=new OledbCommand();
于 2013-08-22T08:05:22.993 回答
2

像这样替换您的查询代码怎么样

 string sqlQuery = "INSERT INTO tblResult([ExamSet],[SetId],[FullMarks],[ObtainedMarks],[MarksPercentage],[ElapsedTime],[LastQIndex],[CreatedDate],[Completed])
        Values(1,27,'200.00',0,0,0,1,DATE(),'N')";

更新:

问题之一可能是Security warning禁用内容。

试试看这是否有效(转到您的 MDB):

  1. 单击“外部数据”选项卡
  2. 应该有一个安全警告,指出“数据库中的某些内容已被禁用”
  3. 单击“选项”按钮
  4. 选择“启用此内容”并单击“确定”按钮
于 2013-08-22T05:47:11.000 回答
0

通过 cmd.Parameters.Add 或 AddRange 尝试参数化查询。例子

var cmd = new SqlCommand("INSERT INTO tbl_name (a, b, c) VALUES (@a, @b, @c)");
cmd.Parameters.AddRange(new[] { new SqlParameter("@a", field1), new SqlParameter("@b", field2), new SqlParameter("@c", field2) });
于 2013-08-22T07:14:39.650 回答
0

(代表 OP 发布)

谢谢大家的帮助,我得到了解决方案。实际上我的代码没有问题。问题是我在文件夹中创建了数据库文件。但是当我构建项目时,它在 bin 文件夹中创建了一个具有相同文件夹和文件名的重复数据库。

所以每次它被插入到那个数据库中。我正在检查我创建的数据库文件。所以我认为它不起作用。

于 2017-04-11T12:50:19.520 回答