尝试从一个表中读取数据,然后将其写入另一个表

本文关键字:然后 数据 另一个 读取 一个 | 更新日期: 2023-09-27 18:21:24

我正在尝试将数据从第一个表插入到另一个表中。我将 2 件事从网站传递给 [WebMethod]。

[WebMethod]
public string purchaseInfo(int itemID, string logedInEmail)

当我运行这个时,抛出一个异常说

"条件表达式中的数据类型不匹配"。

 try
       {
           OleDbConnection conn = new OleDbConnection(connString);
           conn.Open();
           OleDbCommand cmd = conn.CreateCommand();
           cmd.CommandText = "SELECT ItemID, itemName, description, price FROM ItemInfo WHERE (ItemID = '" + itemID + "')"; //ItemID is a AutoNumber field.
           OleDbDataReader reader = cmd.ExecuteReader();
           while (reader.Read()) // Reading the data selected
           {
               int currentItemID = (int)reader["ItemID"];                   
               string currentItemName = (string)reader["itemName"];
               string currentdescription = (string)reader["description"];
               string currentPrice = (string)reader["price"];
               cmd.CommandText = @"INSERT INTO PurchaseInfo (itemID, buyerIDEmail, itemName, description, price)
                                 VALUES ('" + currentItemID + "', '" + logedInEmail + "', '" + currentItemName + "', '" + currentdescription + "', '" + currentPrice + "')";
               cmd.ExecuteNonQuery();                   
           }
           conn.Close();
           return "Successful";
       }
       catch (Exception ex)
       {
           return ex.Message;
       } 

我已经检查了数据库中的所有数据字段是否都是正确的类型,据我所知,它们是正确的。当前项 ID 将插入到数字字段中。其余部分全部插入到短文本字段中。

不知道这是否重要,但购买信息中还有一个自动编号字段。

尝试从一个表中读取数据,然后将其写入另一个表

像这样使用参数化查询:

try
{
   OleDbConnection conn = new OleDbConnection(connString);
   conn.Open();
   OleDbCommand cmd = conn.CreateCommand();
   cmd.CommandText = "SELECT ItemID, itemName, description, price FROM ItemInfo WHERE (ItemID = @itemId)";
   cmd.Parameters.Add(new OleDbParameter("@itemId", itemId)
   OleDbDataReader reader = cmd.ExecuteReader();
   while (reader.Read()) // Reading the data selected
   {
       int currentItemID = (int)reader["ItemID"];                   
       string currentItemName = (string)reader["itemName"];
       string currentDescription = (string)reader["description"];
       string currentPrice = (string)reader["price"];
       cmd.CommandText = @"INSERT INTO PurchaseInfo (itemID, buyerIDEmail, itemName, description, price)
                         VALUES (@currentItemId, @loggedInEmail, @currentItemName, @currentDescription,@currentPrice)";
       cmd.Parameters.Add(new OleDbParameter("@currentItemId", currentItemId);
       cmd.Parameters.Add(new OleDbParameter("@loggedInEmail", loggedInEmail);
       cmd.Parameters.Add(new OleDbParameter("@currentItemName", currentItemName);
       cmd.Parameters.Add(new OleDbParameter("@currentDescription", currentDescription);
       cmd.Parameters.Add(new OleDbParameter("@currentPrice", currentPrice);
       cmd.ExecuteNonQuery();                   
   }
   conn.Close();
   return "Successful";
}
catch (Exception ex)
{
    return ex.Message;
} 

currentItemID将插入到Number字段中。

我认为这就是问题所在,因为您尝试用单引号插入它作为'" + currentItemID + "'.删除它们之间的单引号。

ItemID = '" + itemID + "'对我来说也很可疑。根据它的名字,这也应该是一些数值。因此,您可能还需要删除这些单引号。

但更重要的是,应始终使用参数化查询。这种字符串串联对SQL注入攻击是开放的。

使用 using 语句自动释放连接、命令和读取器,而不是手动调用CloseDispose方法。

using(var connection = new OleDbConnection(connString))
using(var command = connection.CreateCommand())
{
      // Set your CommandText property.
      // Add parameters with `Add` method
      using(var reader = cmd.ExecuteReader())
      {
          while (reader.Read())
          {
               // Get your values.
               // Clear your parameters with `Parameters.Clear()` method.
               // Add new parameters to `cmd`
               // Execute your query.
          }
      }
}
相关文章: