2015-11-13 41 views
-1

我有以下特性Employee類如何插入SQL數據庫空使用十進制類型或字符串的C#對象屬性或INT

 class Employee{ 

      public int? EmployeeId {get; set;} 
      public string Name{get; set;} 
      public decimal? Salary{get; set;} 
     } 

我已經創建了一個對象

Employee emp = new Employee(){EmployeeId = 10, Name = "Peter", Salary = 1000.0} 

我下面寫有插入查詢LoadEmployee()將Employee對象數據插入Employee表的方法

public static void LoadEmployee(Employee obj){ 
    string sqlString = @"Insert into dbo.Employee (EmpId, Name, Salary values ('"+ obj.EmployeeId + "','"+ obj.Name + "','"+obj.Salary"')"; 
    SqlCommand queryCommand = new SqlCommand(sqlString, this.sdwDBConnection); 
    queryCommand.Executereader();  
} 

當我們對EmpId,Name或Salary有非空值時,代碼工作正常。挑戰是名稱或員工標識或薪資可以爲空。使用以下語句,我可以將空值分配給工資。

emp.Salary = null; 
    emp.Name = null; 

將插入查詢後,當我在數據庫驗證,名稱與字符串值更新「空」和爲0。我期待空值的工資更新爲被插入到Employee表名和字段工資。

請幫我在這種情況下如何在數據庫中爲Name或Salary插入null。

+0

你正在創建一個字符串,而c#不知道這是一個SQL字符串。你的null可能會變成一個普通的簡潔的空字符串。如果你想以這種方式插入一個null,你可以在查詢字符串中嵌入字符'n','u','l','l'。 –

回答

6

使用參數。你必須與DBNull.Value明確替換null

string sqlString = @"insert into dbo.Employee (EmpId, Name, Salary) values (@empId, @name, @salary)"; 
SqlCommand command = new SqlCommand(sqlString, this.sdwDBConnection); 
command.Parameters.Add("@empId", SqlDbType.Int).Value = obj.EmployeeId; 
command.Parameters.Add("@salary", SqlDbType.Decimal).Value = (object)obj.Salary ?? DBNull.Value; 
... 
command.ExecuteNonQuery(); 

決不連接字符串創建查詢。它使你容易受到SQL Injection attacks的影響。

此外,您的queryCommand不是查詢,它是一個命令。所以你不應該把它命名爲'query',你應該使用ExecuteNonQuery來執行它。

+0

謝謝Jakub的回覆。 –

相關問題