我尝试将数据插入到第一个表中的另一个表中。我将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;
}
我已检查数据库中的所有数据字段是否都是正确的类型,据我所知。 currentItemID被插入Number字段。 其余全部插入短文字段。
不知道是否重要但在PurchaseInfo中还有一个自动编号字段。
答案 0 :(得分:0)
currentItemID
已插入Number
字段。
我认为这是问题所在,因为您尝试使用单引号作为'" + currentItemID + "'
插入它。删除它们之间的单引号。
ItemID = '" + itemID + "'
对我来说也很可疑。根据它的名称,这也应该是一些数值。因此,您可能也需要删除这些单引号。
但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
使用using
statement自动处理您的连接,命令和阅读器,而不是手动调用Close
或Dispose
方法。
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.
}
}
}
答案 1 :(得分:0)
使用参数化查询,如下所示:
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;
}