使用C#在Visual Studio中使用Microsoft Access数据库,插入,更新和删除

时间:2016-08-25 16:22:09

标签: c# sql visual-studio ms-access-2010 sql-insert

我试图通过Visual Studio 2015和c#向Microsoft Access数据库中的表插入一行。

场景是:一个名为QuestionData的班级和一个班级Question。表格exams和表格questions

我的代码是:

public static bool addQuestion(QuestionData quesData)
    {
        if (quesData == null || quesData.question == null) { return false; }
        List<QuestionData> questionsData = new List<QuestionData>();

        string connetionString = null;
        OleDbConnection cnn;
        connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=database.mdb;";
        cnn = new OleDbConnection(connetionString);
        try
        {
            string insertCmd = "INSERT INTO questions (exam_id, [name], question_text, withImage, question_correctAnswer, answer_1, answer_2, answer_3, answer_4) VALUES (@exam_id, @name, @question_text, @withImage, @question_correctAnswer, @answer_1, @answer_2, @answer_3, @answer_4)";
            OleDbCommand cmd = new OleDbCommand(insertCmd);

            cmd.Parameters.Add("@exam_id", OleDbType.Numeric).Value = quesData.examId;
            cmd.Parameters.Add("@name", OleDbType.LongVarChar).Value = quesData.question.getName();
            cmd.Parameters.Add("@questionText", OleDbType.LongVarChar).Value = quesData.question.getQuestionText();
            cmd.Parameters.Add("@withImage", OleDbType.Boolean).Value = quesData.question.isImageEnabled();
            cmd.Parameters.Add("@question_CorrectAnswer", OleDbType.Numeric).Value = quesData.question.getCorrectAnswer();
            cmd.Parameters.Add("@answer_1", OleDbType.LongVarChar).Value = quesData.question.getAnswer(0);
            cmd.Parameters.Add("@answer_2", OleDbType.LongVarChar).Value = quesData.question.getAnswer(1);
            cmd.Parameters.Add("@answer_3", OleDbType.LongVarChar).Value = quesData.question.getAnswer(2);
            cmd.Parameters.Add("@answer_4", OleDbType.LongVarChar).Value = quesData.question.getAnswer(3);

            cmd.Connection = cnn;
            cnn.Open();
            int result = cmd.ExecuteNonQuery();
            cnn.Close();

            return true;
        }

        catch (Exception ex)
        {
            MessageBox.Show("Exception: \n Source: " + ex.Source + "\n Message: " + ex.Message);
            cnn.Close();
            return false;
        }
    }

一切正常,没有编译或运行时错误,cmd.ExcuteNonQuery();行返回正值(1),但数据库文件没有任何反应。但是Read Query可以正常工作并完成它的工作。

我搜索了谷歌,并尝试了互联网上的每一个解决方案,但没有改变结果。

我感谢任何帮助,以及任何解决问题的指南。

1 个答案:

答案 0 :(得分:0)

使用Access时,参数应标记为&#34;?&#34;。他们没有使用名称,但是他们被添加到参数集合中的顺序(仍然需要假名: - )

尝试替换

string insertCmd = "INSERT INTO questions (exam_id, [name], question_text, withImage, question_correctAnswer, answer_1, answer_2, answer_3, answer_4) VALUES (@exam_id, @name, @question_text, @withImage, @question_correctAnswer, @answer_1, @answer_2, @answer_3, @answer_4)";

string insertCmd = "INSERT INTO questions (exam_id, [name], question_text, withImage, question_correctAnswer, answer_1, answer_2, answer_3, answer_4) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";

使用固定路径检查您是否正在连接到正确的文件。这可能令人困惑。

顺便说一下,你最好使用Connection对象的using关键字,当你退出using语句时,你将确保它将被正确关闭(正常方式和异常)。这一点只是一个很好的做法,而不是你的错误来源。

using cnn = new OleDbConnection(connetionString)
{
  cnn.open
  //Query the DB
}