簡體   English   中英

使用C#在Visual Studio中插入,更新和刪除Microsoft Access數據庫

[英]Microsoft Access Database, Insert, Update and Delete in Visual Studio with C#

我試圖通過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可以很好地工作。

我搜索了google,並嘗試了互聯網上的每個解決方案,但沒有任何改變。

感謝您的幫助和解決問題的指南。

使用Access時,參數應標記為“?”。 它們不使用名稱,而是將它們添加到Parameters集合的順序(仍然需要一個假名稱:-)

嘗試更換

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM