【发布时间】:2016-08-25 16:22:08
【问题描述】:
我正在尝试通过 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 工作正常并且可以正常工作。
我搜索了谷歌,并尝试了互联网上的每一个解决方案,但没有任何改变结果。
感谢任何帮助以及解决问题的任何指南。
【问题讨论】:
-
将第一部分改成这样的字符串 insertCmd = "INSERT INTO questions ([exam_id], [name], [question_text], [withImage], [question_correctAnswer], [answer_1], [answer_2], [answer_3],[answer_4])
-
您确定您查看的是正确的
database.mdb文件吗?我怀疑该应用程序正在写入与您正在检查更改的文件不同的文件。要消除任何歧义,请在连接字符串中使用完整路径。 -
@sstan 我不这么认为,因为我在所有函数中都使用相同的连接字符串,并且在选择函数和通过 Access 软件编辑调试文件夹中的数据库时它可以工作,确实会影响关于阅读其他功能。所以我认为它只是一个数据库。有什么我错过的吗?
-
想不出别的了。
cmd.ExecuteNonQuery()返回1的事实意味着insert肯定有效。所以,不管问题是什么,我认为它不在你的代码中。 -
感谢@sstan 我正在搜索,如果我发现任何可以帮助他人的东西,我会更新问题。
标签: c# sql visual-studio ms-access-2010 sql-insert