2012-02-10 64 views
3

請幫我插入一個日期從dd-mm-yyyy格式的文本框到sql服務器。 我的代碼如下: -如何插入日期從文本框到數據庫

 int prio = Convert.ToInt32(Priority.Text); 
     string stdate = planstart.Text; 
     string endate= planend.Text; 

     string actst = actualstart.Text; 
     string acten = actualend.Text; 



      SqlConnection myconnection = new SqlConnection(constring); 
      SqlCommand mycommand = new SqlCommand(); 
      DataSet mydataset = new DataSet(); 
      SqlDataAdapter mydataadapter = new SqlDataAdapter(); 

      myconnection.Open(); 
      mycommand.Connection = myconnection; 
      mycommand.CommandText = " insert into project_status.dbo.Project_Status_Report values('" + projectcode.Text + "','" + projectname.Text + "',(select P_Code from project_status.dbo.Project_Type where Project_Type = '" + projecttype.Text + "')," + prio + ",'" + stdate + "','" + endate + "','" + actst + "','" + acten + "','" + currentstatus.Text + "','" + remark.Text + "','no');"; 

      mycommand.CommandType = CommandType.Text; 
      mycommand.ExecuteNonQuery(); 

,它是拋出一個異常說: - 從字符串轉換日期和/或時間時 轉換失敗。

+1

1)查看**參數化查詢**以防止SQL注入。 2)如果你的日期應該是一個日期,不要把它當作一個字符串。驗證它是一個有效的日期,將其轉換,然後將其作爲查詢中的參數提供。 – 2012-02-10 06:15:33

+0

你能告訴我如何轉換它嗎?因爲我已經嘗試過但未能轉換。 – 2012-02-10 06:19:09

+0

如果它的工作比接受答案................. – 2012-02-10 06:55:32

回答

1

您需要將數據轉換根據您的SQL Server甲這樣就可以解決問題..

嘗試

String UrDate = "27/12/2011"; 
System.Globalization.DateTimeFormatInfo dateInfo = new System.Globalization.DateTimeFormatInfo(); 
dateInfo.ShortDatePattern = "dd/MM/yyyy"; 
DateTime validDate= Convert.ToDateTime(toDate, dateInfo); 

Format String For Dates

// String to DateTime 
String MyString; 
MyString = "1999-09-01 21:34 PM"; 
//MyString = "1999-09-01 21:34 p.m."; //Depends on your regional settings 

DateTime MyDateTime; 
MyDateTime = new DateTime(); 
MyDateTime = DateTime.ParseExact(MyString, "yyyy-MM-dd HH:mm tt", 
             null); 

製作使用Paramerize查詢來一個void SQL INJECTION ...使代碼更少錯誤代碼 Walkthrough: Displaying Data in a Windows Form Using a Parameterized Query

+0

實際上我採取日期的格式dd/mm/yyyy.and我已經嘗試了上面的代碼,但它是拋出一個異常說,字符串是不是在有效的日期fomat.as我是新的,我不知道這些東西,請幫助我。謝謝你.. – 2012-02-10 06:23:52

+0

嘗試編輯答案..... – 2012-02-10 06:27:53

+0

謝謝你,爲我工作.. – 2012-02-10 06:51:30

0

只需謹慎 - 您需要清理該查詢以防止SQL注入攻擊。考慮使用參數化查詢。閱讀它,這不是這個答案的範圍。

您應該首先創建強類型的DateTime對象,然後按照需要插入的方式對其進行格式化。考慮以下修改代碼:

string stdate = DateTime.Parse(planstart.Text).ToString(); 
string endate = DateTime.Parse(planend.Text).ToString(); 

string actst = DateTime.Parse(actualstart.Text).ToString(); 
string acten = DateTime.Parse(actualend.Text).ToString(); 

編輯

我從toString()方法去除字符串參數,這樣就可以得到有效的DateTime字符串,這是由SQL Server使用。

+0

謝謝you.but我仍然收到錯誤:-String不被認爲是一個有效的日期時間。 – 2012-02-10 06:26:06

+0

那可能是數據庫的區域設置。如果數據類型是日期時間,則需要實際通過VALID日期時間對象。它的顯示格式取決於區域設置。考慮從ToString()方法中刪除字符串參數 - 它應考慮區域設置並返回一個有效的DateTime字符串。 – FarligOpptreden 2012-02-10 06:28:55

0
con.Open(); 
string query = "insert_demo"; 
    /* date fromat Stored*/ 
TextBox2.Text = DateTime.Now.ToLongDateString(); 
SqlCommand com = new SqlCommand(query, con); 


com.CommandType = CommandType.StoredProcedure; 

com.Parameters.AddWithValue("@Name", TextBox1.Text.ToString()); 
com.Parameters.AddWithValue("@Date", TextBox2.Text.ToString()); 

com.ExecuteNonQuery();