【问题标题】:How can I write the NULL in database with C#如何使用 C# 在数据库中写入 NULL
【发布时间】:2020-03-06 05:35:48
【问题描述】:

我有 A 表和 B 表。 B 表根据 A 表的变化每天更新。 在 A 表 2 实体中,例如:SCD_DEPT(字符串值)和 LEAVE_DATE(DateTime),在 A 表中,SCD_DEPT 和 LEAVE_DATE 的空值看起来“NULL”,但在 B 表中,空的 SCD_DEPT 值看起来是空的。 我想清空 SCD_DEPT 值在 B 表中看起来“NULL”

这是我代码中的更新部分

var employeequery = $"{UpdateQuery} EMAIL=@EMAIL, GID = @GID, SAP_COMPANY_CODE=@SAP_COMPANY_CODE, FIRST_NAME=@FIRST_NAME, LAST_NAME = @LAST_NAME, COST_CENTER=@COST_CENTER, MANAGER_EMPLOYEE_ID=@MANAGER_EMPLOYEE_ID, SCD_DEPT=@SCD_DEPT, LEAVE_DATE= @LEAVE_DATE, START_DATE=@START_DATE, CONTRACT_TYPE=@CONTRACT_TYPE, MONTHLY_WORKING_DAY=@MONTHLY_WORKING_DAY, STATUS=@STATUS, LAST_UPDATE_TIME=@LAST_UPDATE_TIME  WHERE EMPLOYEE_ID = @EMPLOYEE_ID";
            var command = DataAccess.Instance.CreateCommand(employeequery);
            command.Parameters.AddWithValue("@EMPLOYEE_ID", entity.Id);
            command.Parameters.AddWithValue("@EMAIL", entity.Email);
            command.Parameters.AddWithValue("@GID", entity.Gid);
            command.Parameters.AddWithValue("@SAP_COMPANY_CODE", entity.SapCompanyCode);
            command.Parameters.AddWithValue("@FIRST_NAME", entity.FirstName);
            command.Parameters.AddWithValue("@LAST_NAME", entity.LastName);
            command.Parameters.AddWithValue("@COST_CENTER", entity.CostCenterName);
            command.Parameters.AddWithValue("@MANAGER_EMPLOYEE_ID", entity.ManagerEmployeeID);
            if(entity.ScdDept == "  ")
            {
                command.Parameters.AddWithValue("@SCD_DEPT", DBNull.Value);
            }
            else
            {
                command.Parameters.AddWithValue("@SCD_DEPT", entity.ScdDept);
            }

                command.Parameters.AddWithValue("@LEAVE_DATE", entity.LeaveDate);
            command.Parameters.AddWithValue("@START_DATE", entity.StartDate);
            command.Parameters.AddWithValue("@CONTRACT_TYPE", entity.ContractType);
            command.Parameters.AddWithValue("@MONTHLY_WORKING_DAY", entity.MonthlyWorkingDay);
            command.Parameters.AddWithValue("@STATUS", entity.Status);
            command.Parameters.AddWithValue("@LAST_UPDATE_TIME", entity.LastUpdateTime);

我尝试 if else for SCD_DEPT(字符串值)但它不起作用。我想要更有效和更有效的方式。 感谢您的所有帮助。

【问题讨论】:

  • 您可以使用 if(entity.ScdDept == null) 检查空值。
  • 但我做了调试。和 ScdDept 看起来像 ScdDept = " " 但我想在数据库中写 NULL。
  • 您是否确认输入了 if/else 的哪一部分?您确定 entity.ScdDept 包含两个空格(根据您在代码中对 null 的要求)吗?

标签: c# sql-server tsql null sql-update


【解决方案1】:

我想你在检查之前没有将entity.ScdDept 与“@SCP_DEPT”链接,或者它在上面的某个地方创建?如果是,您应该将if(entity.ScdDept == " ") 更改为if(entity.ScdDept == null)。请尝试并回信。

【讨论】:

  • 如果在B表的创建sql行中写了“NOT NULL”呢?
【解决方案2】:

使用string.IsNullOrWhiteSpace(entity.ScdDept?.Trim())

【讨论】:

    【解决方案3】:

    试试这个:

    var employeequery = $"{UpdateQuery} EMAIL=@EMAIL, GID = @GID, SAP_COMPANY_CODE=@SAP_COMPANY_CODE, FIRST_NAME=@FIRST_NAME, LAST_NAME = @LAST_NAME, COST_CENTER=@COST_CENTER, MANAGER_EMPLOYEE_ID=@MANAGER_EMPLOYEE_ID, SCD_DEPT=NULLIF(@SCD_DEPT, ''), LEAVE_DATE= @LEAVE_DATE, START_DATE=@START_DATE, CONTRACT_TYPE=@CONTRACT_TYPE, MONTHLY_WORKING_DAY=@MONTHLY_WORKING_DAY, STATUS=@STATUS, LAST_UPDATE_TIME=@LAST_UPDATE_TIME  WHERE EMPLOYEE_ID = @EMPLOYEE_ID";
    
    var command = DataAccess.Instance.CreateCommand(employeequery);
        command.Parameters.AddWithValue("@EMPLOYEE_ID", entity.Id);
        command.Parameters.AddWithValue("@EMAIL", entity.Email);
        command.Parameters.AddWithValue("@GID", entity.Gid);
        command.Parameters.AddWithValue("@SAP_COMPANY_CODE", entity.SapCompanyCode);
        command.Parameters.AddWithValue("@FIRST_NAME", entity.FirstName);
        command.Parameters.AddWithValue("@LAST_NAME", entity.LastName);
        command.Parameters.AddWithValue("@COST_CENTER", entity.CostCenterName);
        command.Parameters.AddWithValue("@MANAGER_EMPLOYEE_ID", entity.ManagerEmployeeID);
        command.Parameters.AddWithValue("@SCD_DEPT", entity.ScdDept);
        command.Parameters.AddWithValue("@LEAVE_DATE", entity.LeaveDate);
        command.Parameters.AddWithValue("@START_DATE", entity.StartDate);
        command.Parameters.AddWithValue("@CONTRACT_TYPE", entity.ContractType);
        command.Parameters.AddWithValue("@MONTHLY_WORKING_DAY", entity.MonthlyWorkingDay);
        command.Parameters.AddWithValue("@STATUS", entity.Status);
        command.Parameters.AddWithValue("@LAST_UPDATE_TIME", entity.LastUpdateTime);
    

    【讨论】:

    • 其实在开始时是这样的。但我尝试在 scdDept 中写“NULL”而不是空格
    【解决方案4】:

    我这样解决了这个问题:

    var employeequery = $"{UpdateQuery} EMAIL=@EMAIL, GID = @GID, SAP_COMPANY_CODE=@SAP_COMPANY_CODE, FIRST_NAME=@FIRST_NAME, LAST_NAME = @LAST_NAME, COST_CENTER=@COST_CENTER, MANAGER_EMPLOYEE_ID=@MANAGER_EMPLOYEE_ID, SCD_DEPT=@SCD_DEPT, LEAVE_DATE= @LEAVE_DATE, START_DATE=@START_DATE, CONTRACT_TYPE=@CONTRACT_TYPE, MONTHLY_WORKING_DAY=@MONTHLY_WORKING_DAY, STATUS=@STATUS, LAST_UPDATE_TIME=@LAST_UPDATE_TIME  WHERE EMPLOYEE_ID = @EMPLOYEE_ID";
                var command = DataAccess.Instance.CreateCommand(employeequery);
                command.Parameters.AddWithValue("@EMPLOYEE_ID", entity.Id);
                command.Parameters.AddWithValue("@EMAIL", entity.Email);
                command.Parameters.AddWithValue("@GID", entity.Gid);
                command.Parameters.AddWithValue("@SAP_COMPANY_CODE", entity.SapCompanyCode);
                command.Parameters.AddWithValue("@FIRST_NAME", entity.FirstName);
                command.Parameters.AddWithValue("@LAST_NAME", entity.LastName);
                command.Parameters.AddWithValue("@COST_CENTER", entity.CostCenterName);
                command.Parameters.AddWithValue("@MANAGER_EMPLOYEE_ID", entity.ManagerEmployeeID);
                if (entity.ScdDept == "") command.Parameters.AddWithValue("@SCD_DEPT", DBNull.Value);
                else command.Parameters.AddWithValue("@SCD_DEPT", entity.ScdDept);
                if (entity.LeaveDate == DateTime.MaxValue) command.Parameters.AddWithValue("@LEAVE_DATE", DBNull.Value);
                else command.Parameters.AddWithValue("@LEAVE_DATE", entity.LeaveDate);
                command.Parameters.AddWithValue("@START_DATE", entity.StartDate);
                command.Parameters.AddWithValue("@CONTRACT_TYPE", entity.ContractType);
                command.Parameters.AddWithValue("@MONTHLY_WORKING_DAY", entity.MonthlyWorkingDay);
                command.Parameters.AddWithValue("@STATUS", entity.Status);
                command.Parameters.AddWithValue("@LAST_UPDATE_TIME", entity.LastUpdateTime);
    

    感谢您的宝贵时间。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      相关资源
      最近更新 更多