c# - 使用参数将数据插入access数据库

标签 c# asp.net ms-access

我有以下方法将数据插入到 Access 数据库中,该方法工作正常,但如果我尝试插入包含单引号的文本,我确实会遇到问题。

[WebMethod]
public void bookRatedAdd(string title, int rating, string review, string ISBN, string userName)
{
    OleDbConnection conn;
    conn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;
                                               Data Source=" + Server.MapPath("App_Data\\BookRateInitial.mdb"));

    conn.Open();

    OleDbCommand cmd = conn.CreateCommand();

    cmd.CommandText = @"INSERT INTO bookRated([title], [rating],  [review], [frnISBN], [frnUserName])VALUES('" + title + "', '" + rating + "','" + review + "','" + ISBN + "', '" + userName + "')";
    cmd.ExecuteNonQuery();
    conn.Close();
}

据我了解,解决问题的方法之一是使用参数。老实说,我不确定该怎么做。我该如何更改上述代码,以便使用参数插入数据?

最佳答案

与任何其他查询相同:

a) 替换您的 OleDbCommand 中的实际硬编码参数带占位符(以 @ 为前缀),
b) 添加 OleDbParameter 的实例到 DbCommand.Parameters属性(property)。参数名称必须与占位符名称匹配。

[WebMethod]
public void bookRatedAdd(string title, int rating, string review, string ISBN, string userName)
{
   using (OleDbConnection conn = new OleDbConnection(
         "Provider=Microsoft.Jet.OleDb.4.0;"+
         "Data Source="+Server.MapPath("App_Data\\BookRateInitial.mdb"));
   {

      conn.Open();

      // DbCommand also implements IDisposable
      using (OleDbCommand cmd = conn.CreateCommand())
      {
           // create command with placeholders
           cmd.CommandText = 
              "INSERT INTO bookRated "+
              "([title], [rating],  [review], [frnISBN], [frnUserName]) "+
              "VALUES(@title, @rating, @review, @isbn, @username)";

           // add named parameters
           cmd.Parameters.AddRange(new OleDbParameter[]
           {
               new OleDbParameter("@title", title),
               new OleDbParameter("@rating", rating),
               ...
           });

           // execute
           cmd.ExecuteNonQuery();
      }
   }
}

关于c# - 使用参数将数据插入access数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5893837/

相关文章:

c# - 我可以停止 IIS 吗?

javascript - Ajax ViewComponent 触发多次

database - MS Access - 计算

ms-access - 空列的 DMin

c# - StringBuilder内存不足C#

c# - 连接到不安全的gRPC channel 时的"The response ended prematurely"

c# - async/await 更改后,使用 Dispatcher.Invoke() 不能解决除 Dispatcher 线程以外的 CollectionView 更改

asp.net - 带有 IHttpControllerSelector 的 AttributeRouting - Api 版本控制

asp.net - WebMatrix Razor 页面和全局 using 语句

c# - 查询数据库的问题 - 仅适用于我的电脑