尝试使用 C# 将数据插入 MS Access 数据库,但插入命令不起作用

Posted

技术标签:

【中文标题】尝试使用 C# 将数据插入 MS Access 数据库,但插入命令不起作用【英文标题】:Trying to insert data into MS Access database using C# but insert command is not working 【发布时间】:2020-04-30 03:10:52 【问题描述】:

我的插入命令出错。我正在尝试将来自 html 页面上的文本框的用户输入数据添加到我已经创建并连接的访问​​数据库中。我的插入命令的语法有问题。

这是我的 HTML 页面

<form name="insert" method="post" action="insertinventory.aspx">
<center>
    <h1> FLOATEEZ Add Inventory </h1>

    Item Number: <input type="text" name="txtnum"> <br>
    Item Name: <input type="text" name="txtname"> <br>
    Item Description: <input type="text" name="txtdescription"> <br>
    Item Price: <input type="text" name="txtprice"> <br>
    Item Quantity on Hand: <input type="text" name="txtqoh"> <br>
    Item Picture: (text only) <input type="text" name="txtpicture"> <br><br>

    <input type="submit" value="Submit"> &nbsp &nbsp <input type="reset">        
</center>
</form>

这是我的 aspx 页面减去我的数据库信息

<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System.Data.Odbc" %>
<%
Response.Write("<html><head><title>Insert into Inventory </title></head></body>");
Response.Write("<body bgcolor=lightblue>");

OdbcConnection myconn;
OdbcCommand mycmd;
OdbcDataReader myreader;

myconn= new OdbcConnection( I removed this part );
mycmd = new OdbcCommand("insert into inventory 
    (Itemnum,Itemname,Itemdescription,Itemprice,Itemqoh,Itempicture) values 
    ('"+ txtnum.Text +"','"+ txtname.Text +"','"+ txtdescription.Text 
    +"','"+ txtprice.Text +"','"+ txtqoh.Text +"','"+ txtpicture.Text 
    +"')",myconn);

myreader.Close();
myconn.Close();
%>
<br>
<center> <a href ="Company.html" > Back to our Homepage </a> </center>

【问题讨论】:

【参考方案1】:

一定要使用参数!您从用户那里获得的每个值都使用一个问号。

以下示例取自https://www.mikesdotnetting.com/article/26/parameter-queries-in-asp-net-with-ms-access。 (一个很好的资源。)

string ConnString = Utils.GetConnString();    
string SqlString = "Insert Into Contacts (FirstName, LastName) Values (?,?)";

using (OleDbConnection conn = new OleDbConnection(ConnString))    
    
  using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))    
      
    cmd.CommandType = CommandType.Text;    
    cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);    
    cmd.Parameters.AddWithValue("LastName", txtLastName.Text);

    conn.Open();    
    cmd.ExecuteNonQuery();    
      

【讨论】:

【参考方案2】:

需要将连接绑定到命令,并调用命令执行语句,例如:

...
mycmd.Connection = myconn;
mycmd.ExecuteNonQuery();

myconn.Close();

无需阅读器。

更好的操作数据库的方法是:

using(OdbcConnection myconn = new OdbcConnection(connectionString))

    using(OdbcCommand mycmd = OdbcCommand(your code here))
    
        mycmd.Connection = myconn;
        mycmd.ExecuteNonQuery();
    

对于using关键字,它会自动处理连接和命令实例。

【讨论】:

以上是关于尝试使用 C# 将数据插入 MS Access 数据库,但插入命令不起作用的主要内容,如果未能解决你的问题,请参考以下文章

插入数十万行时,MySQL 与 MS Access 相比非常慢

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

尝试使用“插入”ms-access 数据库时出错

如何在ms access数据库c#中插入带有主键的记录

使用 C# windows 窗体向 Ms Access 数据库插入新记录时出现语法错误

插入 ms 访问数据库