[英]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.