c# - 没有数据插入数据库
问题描述
很难给这个问题起个标题。并且不容易解释这个问题。
基本上我有一个存储过程,当我手动测试它时它可以工作。如果我将对象属性放在 IF 块内,它将起作用。
以下不起作用:
var dao = new CableDAO();
foreach (var tag in tagsFromCustomer)
{
Log.Information("Tag ID: {0} - Class: {1}", tag.TagId, tag.Class);
//if (tag.TagId== "PT215009D")
//{
try
{
int returnValue = dao.UpdateCable(tag);
Log.Information("Executed update on: {0}. Return value: {1}", tag.TagId, returnValue);
}
catch (Exception ex)
{
Log.Error(ex.Message);
Log.Error(ex.StackTrace);
throw;
}
//}
}
这有效:
var dao = new CableDAO();
foreach (var tag in tagsFromCustomer)
{
Log.Information("Tag ID: {0} - Class: {1}", tag.TagId, tag.Class);
if (tag.TagId== "PT215009D")
{
try
{
int returnValue = dao.UpdateCable(tag);
Log.Information("Executed update on: {0}. Return value: {1}", tag.TagId, returnValue);
}
catch (Exception ex)
{
Log.Error(ex.Message);
Log.Error(ex.StackTrace);
throw;
}
}
}
两个示例中的集合中的数据相同。这意味着带有 TagId PT215009D 的对象确实存在,因此无论 IF 语句如何,UpdateCable 都会使用传递给它的对象运行。我可以通过查看日志或在使用断点进行调试来验证这一点。具有相同参数的相同对象。
但奇怪的是,除非我在 IF 块中对其进行测试,否则数据库中没有任何更新。
以下是我的数据访问对象的代码:
public class CableDAO
{
private readonly string connectionString;
public CableDAO()
{
connectionString = ConfigurationManager.ConnectionStrings["Default"].ConnectionString;
}
public int UpdateCable(Tag cable)
{
using (var dbConnection = new OracleConnection(connectionString))
{
dbConnection.Open();
using (var command = dbConnection.CreateCommand())
{
command.CommandText = Properties.Settings.Default.OracleProcedureNewCable;
command.CommandType = System.Data.CommandType.StoredProcedure;
command.BindByName = true;
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_tag_id", Value = (object)cable.TagId ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_description", Value = (object)cable.Description ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_description_2", Value = (object)cable.Description2 ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_tag_category", Value = (object)cable.Class ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_cable_estimated_length", Value = (object)cable.CableEstimatedLength.Replace(".", ",") ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_discipline_code", Value = (object)cable.DisciplineCode ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_system", Value = (object)cable.FreeFunction ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_category_id", Value = (object)cable.CategoryId ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, ParameterName = "p_dry_weight", Value = (object)cable.DryWeight ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_location", Value = (object)cable.FreeLocation ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_to_area", Value = (object)cable.ToArea ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_from_area", Value = string.IsNullOrEmpty(cable.FromArea) ? DBNull.Value : (object)cable.FromArea });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_to_tag", Value = (object)cable.ToTag ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_from_tag", Value = (object)cable.FromTag ?? DBNull.Value });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_installed_length", Value = string.IsNullOrEmpty(cable.InstalledLength) ? DBNull.Value : (object)cable.InstalledLength.Replace(".", ",") });
command.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, ParameterName = "p_segregation_level", Value = (object)cable.SegregationLevel ?? DBNull.Value });
Log.Information("Parameters count: {0}", command.Parameters.Count);
foreach (OracleParameter param in command.Parameters)
{
Log.Information("Parametername: {0}, Value : {1}. Type: {2}.", param.ParameterName, param.Value.ToString(), param.DbType);
}
int rowsAffected = command.ExecuteNonQuery();
dbConnection.Close();
return rowsAffected;
}
}
}
}
数据库中未创建任何内容时的输出/执行屏幕截图: https ://oimg.photobucket.com/albums/v48/differ/30-07-2020%2013-34-06.png
在数据库中创建对象时输出/执行的屏幕截图: https ://oimg.photobucket.com/albums/v48/differ/30-07-2020%2013-31-24.png
提前致谢!
解决方案
推荐阅读
- javascript - 为什么我无法使用通过 firebase 从 facebook sdk 获得的凭据登录?
- android - 使用具有相同名称引用的 NavigationComponent 和 SafeArgs 从 Activity 向 Fragment 发送参数
- mysql - 获取查询总数的最有效方法,但仅检索前 N 项
- django - 我从入口点导出了环境变量,但是为什么我在docker容器中打印它时看不到它?
- java - 无法匹配方法参数中的泛型类型
- php - 在 Woocommerce 中显示每克产品的价格
- microsoft-teams - Microsoft Teams 桌面应用程序中的浏览器版本过时
- c# - C# 正则表达式由多个右括号集分割
- android - 在Linux(Ubuntu)中按下Power,Vllume up,More等模拟器按钮后,Android Emulator停止工作
- javascript - 需要键盘时隐藏焦点并显示模糊并超时?