2012-11-11 61 views
0

我使用dateTimePicker的收集來自用戶的日期的窗口形式在SQL Server數據庫中插入,但是當我調試它,它說:「粗野,轉換日期時間爲字符串」這裏是代碼轉換dateTimePicker的值轉換成字符串

string Agent = FieldAgentCombo.Text; 
      string Query = "INSERT INTO Comittment(Date,Field_Staff_Date,Detail,Priority,company_name,Name) values('" + Client + "','" + Agent + "','" + Date + "','" + FieldStaffDate + "','" + Detail + "','" + Priority + "')"; 

      SqlCommand cmd = new SqlCommand(Query, conn); 

      int status = cmd.ExecuteNonQuery(); 
      if (status > 0) 
       MessageBox.Show("record inserted"); 
+3

它看起來像你的字段順序錯誤...第一個字段是日期和你的第一個值命名爲客戶端。 – MikeSmithDev

+0

datetime的數據庫列是日期嗎?然後檢查您的表格列和您的查詢中輸入的值的順序... – bonCodigo

+0

如果datetime的數據庫列是日期,那麼將日期分配給DateTime類型,如果它是字符串,則將dateTime值分配給字符串變量,方法是將其轉換爲串。 –

回答

3

您的代碼易受SQL injection影響。我會推薦你​​使用參數化查詢。同樣在你的SQL查詢中,你似乎混合了這些參數。確保它們匹配。例如:

// load the values that you want to insert into standard .NET types 
DateTime date = ... 
DateTime fieldStaffDate = ... 
string detail = ... 
string priority = ... 
string companyName = ... 
string name = ... 

// now connect to the database to execute the SQL query 
using (var conn = new SqlConnection(ConnectionString)) 
using (var cmd = conn.CreateCommand()) 
{ 
    conn.Open(); 
    cmd.CommandText = 
    @"INSERT INTO Comittment(
      Date, 
      Field_Staff_Date, 
      Detail, 
      Priority, 
      company_name, 
      Name) 
     VALUES (
      @Date, 
      @Field_Staff_Date, 
      @Detail, 
      @Priority, 
      @company_name, 
      @name)"; 

    cmd.Parameters.AddWithValue("@Date", date); 
    cmd.Parameters.AddWithValue("@Field_Staff_Date", fieldStaffDate); 
    cmd.Parameters.AddWithValue("@Detail", detail); 
    cmd.Parameters.AddWithValue("@Priority", priority); 
    cmd.Parameters.AddWithValue("@company_name", companyName); 
    cmd.Parameters.AddWithValue("@name", name); 

    cmd.ExecuteNonQuery(); 
} 

這樣的查詢不再容易受到SQL注入,並在除了ADO.NET,這樣你不將採取適當的格式化.NET類型到相應的SQL類型的醫療服務需要做任何字符串解析和日期操作。

0

如果要插入當前日期到SQL,而不是做轉換,只需添加now()直接查詢

除此之外,檢查此鏈接:http://www.csharp-examples.net/string-format-datetime/

// create date time 2008-03-09 16:05:07.123 
DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123); 

String.Format("{0:y yy yyy yyyy}", dt); // "8 08 008 2008" year 
String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month 
String.Format("{0:d dd ddd dddd}", dt); // "9 09 Sun Sunday" day 
String.Format("{0:h hh H HH}",  dt); // "4 04 16 16"  hour 12/24 
String.Format("{0:m mm}",   dt); // "5 05"   minute 
String.Format("{0:s ss}",   dt); // "7 07"   second 
String.Format("{0:f ff fff ffff}", dt); // "1 12 123 1230" sec.fraction 
String.Format("{0:F FF FFF FFFF}", dt); // "1 12 123 123" without zeroes 
String.Format("{0:t tt}",   dt); // "P PM"   A.M. or P.M. 
String.Format("{0:z zz zzz}",  dt); // "-6 -06 -06:00" time zone