我有一个令人难以置信的恼人的问题,访问数据库坐在我们的服务器上。昨天它很好的工作,突然开始蹲在外面
条件表达式中的数据类型无效
我能看到的数据之间的唯一区别是,如果我将SQL查询值记录到错误消息中,我可以看到
Document Date
@documentDate : 2018-10-09 12:00:00 AM
本地计算机
@documentDate : 09/10/2018 12:00:00
所有其他值看起来完全相同。
DateTime
值并适当地存储它,因为该列是数据类型
Date/Time
我真的很感激你的帮助,这让我发疯了。
public int InsertAod(Aod aod)
{
if (CheckAod(aod) > 0)
{
Log.Message("This entry already exists");
return 1;
}
var cmd = new OleDbCommand(Constants.InsertAod);
cmd.Parameters.AddWithValue("@company", aod.ParentCollection.Company);
cmd.Parameters.AddWithValue("@businessUnit", aod.ParentCollection.BusinessUnit);
cmd.Parameters.AddWithValue("@sellerGln", aod.ParentCollection.SellerGln);
cmd.Parameters.AddWithValue("@messageId", aod.ParentCollection.MessageId);
cmd.Parameters.AddWithValue("@documentNo", aod.ParentCollection.DocumentNumber);
cmd.Parameters.AddWithValue("@documentDate", aod.ParentCollection.DocumentDate); // Data type of DocumentDate is DateTime
cmd.Parameters.AddWithValue("@region", aod.ParentCollection.Region);
cmd.Parameters.AddWithValue("@storeGln", aod.ParentCollection.StoreGln);
cmd.Parameters.AddWithValue("@storeCode", aod.ParentCollection.StoreCode);
cmd.Parameters.AddWithValue("@storeDescription", aod.ParentCollection.StoreDescription);
cmd.Parameters.AddWithValue("@lineItem", aod.LineItem);
cmd.Parameters.AddWithValue("@movementType", aod.MovementType);
cmd.Parameters.AddWithValue("@orderNo", aod.OrderNumber);
cmd.Parameters.AddWithValue("@reference", aod.ParentCollection.Reference);
cmd.Parameters.AddWithValue("@barcode", aod.Barcode);
cmd.Parameters.AddWithValue("@articleNo", aod.PnPArticleNumber);
cmd.Parameters.AddWithValue("@vendorCode", aod.VendorProductCode);
cmd.Parameters.AddWithValue("@articleDescription", aod.PnPArticleDescription);
cmd.Parameters.AddWithValue("@qty", aod.PnPQuantity);
try
{
//throw new Exception("how is this possible");
return ExecuteCommand(cmd, Execute.Insert);
}
catch (Exception e)
{
var data = cmd.Parameters.Count.ToString();
foreach (OleDbParameter parameter in cmd.Parameters)
{
data += $" {Environment.NewLine} {parameter.ParameterName} : {parameter.Value} {Environment.NewLine}";
}
Log.Error(e, $"Failed to insert AOD for {aod.OrderNumber} - {aod.LineItem}", data);
return 0;
}
}
这是你的密码
CheckAod
:
public int CheckAod(Aod aod)
{
var cmd = new OleDbCommand(Constants.CountAod);
cmd.Parameters.AddWithValue("@orderNo", aod.OrderNumber);
cmd.Parameters.AddWithValue("@messageId", aod.ParentCollection.MessageId);
cmd.Parameters.AddWithValue("@lineItem", aod.LineItem);
try
{
return ExecuteCommand(cmd, Execute.Count);
}
catch (Exception e)
{
Log.Error(e, "Failed to call CheckAod");
throw;
}
}
以及
ExecuteCommand
private int ExecuteCommand(OleDbCommand cmd, Execute command)
{
var output = 0;
if (!(persistantConnection.State == ConnectionState.Open))
persistantConnection.Open();
cmd.Connection = persistantConnection;
using (cmd)
{
try
{
switch (command)
{
case Execute.Insert:
output = cmd.ExecuteNonQuery();
Log.Message("success");
break;
case Execute.Count:
output = (int)cmd.ExecuteScalar();
break;
}
}
catch (Exception e)
{
var data = cmd.Parameters.Count.ToString();
foreach (OleDbParameter parameter in cmd.Parameters)
{
data += $" {Environment.NewLine} {parameter.ParameterName} : {parameter.Value} {Environment.NewLine}";
}
Log.Error(e, "Failed to execute command", data);
throw;
}
return output;
}
}
这是什么
Constants.InsertAod
看起来像:
internal const string InsertAod =
@"INSERT INTO TAOD ([COMPANY], [BUSINESS UNIT], [SELLER GLN], [MESSAGE ID], [DOCUMENT NO],
[DOCUMENT DATE], [REGION], [STORE GLN], [STORE CODE], [STORE DESCRIPTION], [LINE ITEM],
[MOVEMENT TYPE], [ORDER NO], [REFERENCE], [BARCODE], [PNP ARTICLE NO],
[VENDOR PRODUCT CODE], [PNP ARTICLE DESCRIPTION], [PNP QTY])
VALUES (@company, @businessUnit, @sellerGln, @messageId, @documentNo, @documentDate, @region,
@storeGln, @storeCode, @storeDescription, @lineItem, @movementType, @orderNo, @reference,
@barcode, @articleNo, @vendorCode, @articleDescription, @qty)";