C# OleDB SQL 插入命令

Posted

技术标签:

【中文标题】C# OleDB SQL 插入命令【英文标题】:C# OleDB SQL Insert Command 【发布时间】:2012-11-18 17:20:01 【问题描述】:

我正在尝试使用 C# 和 Visual Studio 2012 在我的 MS Access 数据库中实现 SQL INSERT 命令。

但是在那之后,当我打开我的Access数据库时,即使insert命令也没有更新,通过在executeNonQuery()之后显示成功弹出窗口可以成功创建@

您能告诉我如何使这个插入 SQL 命令起作用吗?

这是我的代码

OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = @"INSERT INTO STUDENT(CHI_NAME, ENG_NAME, NICK_NAME, 
                                        BD_YYYY, BD_MM, BD_DD,
                                        HOME_TEL, NO_OF_CHILD, PARENT_EMAIL,
                                        SEC_EMAIL, STUDENT_ADDR, DISTRICT, 
                                        MOTHER_NAME, MOTHER_TEL, MOTHER_OCCU, 
                                        FATHER_NAME, FATHER_TEL, FATHER_OCCU,
                                        E_NAME, E_TEL, E_RELATIONSHIP, REMARKS) 
                    VALUES(@NEW_CHI_NAME, @NEW_EN  G_NAME, @NEW_NICK_NAME, 
                           @NEW_BD_YYYY, @NEW_BD_MM .....);"

cmd.CommandType = CommandType.Text;

cmd.Parameters.AddWithValue("@NEW_CHI_NAME", chi_name);
cmd.Parameters.AddWithValue("@NEW_ENG_NAME", eng_name);
cmd.Parameters.AddWithValue("@NEW_NICK_NAME", nick_name);            
cmd.Parameters.AddWithValue("@NEW_BD_YYYY", bd_year);
cmd.Parameters.AddWithValue("@NEW_BD_MM", bd_month);
....

cmd.Connection = connection;
connection.Open();
cmd.Transaction = connection.BeginTransaction();
int rows= cmd.ExecuteNonQuery();

if(rows > 0)

     MessageBox.Show("Insert New Client Success!");

else

    MessageBox.Show("Insert New Client Failed!"); 


cmd.Transaction.Commit();
connection.Dispose();
connection.Close();

【问题讨论】:

显示您的连接字符串也无妨。 另外:我会先提交交易,显示消息框之前! 您是否拥有多个 Access DB 副本?根据您的解释,您很可能正在更新与您正在验证的数据库不同的数据库。正如 ethron10 建议的那样,检查您的连接字符串 你应该在 .Dispose() 连接之前 .Close() 连接。 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\KidSquare_1.0.4.accdb;Persist Security Info=True" 将数据库放入项目文件中 【参考方案1】:

Solution Explorer 中,右键单击您的Access 文件,选择Properties,然后将Copy To Output Directory 设置为Copy if Newer

【讨论】:

获取不到更新的问题是访问权限导致的吗? 不,问题是因为每次调试应用程序时,Access 数据库的副本都会复制到 projectFolder\bin\debug 文件夹。所有更改都发生在该文件上,因此您的原始 Access 不会显示任何内容。更重要的是,由于每次调试数据库都会被覆盖,因此您不会看到调试之间的变化。但是,如果您在未调试的情况下打开 projectFolder\bin\debug 中的数据库,您将看到更改。一种更持久的方法而不是复制更新的方法是简单地部署您的应用程序。 这是否意味着DB的更改被提交到存储在调试文件中的DB而不是项目文件夹中的DB?似乎将数据库拖到项目文件夹中仅用于数据库连接和应用表架构 是的。对不起,如果我的措辞令人困惑。并填充初始数据。 我们当然可以检索它们。还是您的意思是您只想检索来自特定用户的那些?无论哪种方式,如果您部署应用程序,您不必担心数据库会被覆盖,所有更改都会持续存在。覆盖行为只存在于VS调试中【参考方案2】:

进入调试目录,你会发现你的 accdb 文件复制在那里。打开并验证。

【讨论】:

以上是关于C# OleDB SQL 插入命令的主要内容,如果未能解决你的问题,请参考以下文章

C# OleDb 插入带参数的整数

C# 使用OleDB写数据到excel的插入数据语句!!!

通过 C# 和 OleDb 在 Excel 电子表格中插入一行

如何使用 oledb 在 c# 中将下拉列数据插入到 excel 中

插入语句 C# OleDb 中的语法错误

无法通过 C# oledb 将记录插入 MS Access