2013-02-02 203 views
1

我需要將ASP.Net文本框中的日期提取存儲到SQL Server 2008 date列中。從字符串SQL Server日期轉換

我收到以下異常消息。

從字符串轉換日期和/或時間時轉換失敗。

我的代碼是:

SqlConnection cn; 
SqlCommand cmd; 
SqlDataAdapter da; 

int n=4; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    cn = new SqlConnection(<Connection String>); 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
     try 
     { 
      string query = "insert into temp values('" + TextBox1.Text + "')"; 
      cn.Open(); 
      cmd = new SqlCommand(query, cn); 
      cmd.ExecuteNonQuery(); 
      cn.Close(); 
      Response.Write("Record inserted successfully"); 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
    } 

} 

請幫助..提前

感謝

+2

夫婦的事情。 1)您的代碼對SQL注入攻擊廣泛開放。 2)我想你試圖插入一個'DateTime'字段,但是你的邏輯將它作爲一個字符串傳遞。 –

+0

再一次,這些問題都是一樣的。字符串連接是壞的。 http://stackoverflow.com/questions/14660255/read-data-from-sql-database-using-datetime-picker/14660601#14660601 – Steve

回答

0

你必須做多次更改

  1. 轉換你的日期日期時間
  2. 傳遞值作爲參數以避免SQL注入
  3. 將字段設置爲數據庫中的日期時間。

您的代碼將是這樣的

SqlConnection cn; 
SqlCommand cmd; 
SqlDataAdapter da; 

int n=4; 
protected void Page_Load(object sender, EventArgs e) 
{ 
cn = new SqlConnection(<Connection String>); 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string query = "insert into temp values(@date))"; 
     cn.Open(); 
     cmd = new SqlCommand(query, cn); 
     cmd.Parameters.AddWithValue("@date",Convert.DateTime(TextBox1.Text)); 
     cmd.ExecuteNonQuery(); 
     cn.Close(); 
     Response.Write("Record inserted successfully"); 
    } 
    catch (Exception ex) 
    { 
    Response.Write(ex.Message); 
    } 

} 
+1

謝謝@syed mohsin ... 代碼完美工作 –

4

你的代碼更改爲以下(假設列temp實際上是一個DateTime) :

protected void Button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string query = "insert into temp values(@Value)"; 
     cn.Open(); 
     cmd = new SqlCommand(query, cn); 
     cmd.Parameters.AddWithValue("@Value", DateTime.Parse(TextBox1.Text)); 
     cmd.ExecuteNonQuery(); 
     cn.Close(); 
     Response.Write("Record inserted successfully"); 
} 
catch (Exception ex) 
{ 
    Response.Write(ex.Message); 
} 

}

您還應該更改邏輯以驗證TextBox1.Text實際上是有效的日期。

+0

嘗試此代碼,但得到相同的錯誤@丹尼爾凱利 –

+2

@ user2017483什麼是價值TextBox1.Text在點擊按鈕的位置? 'temp'中的列是什麼數據類型? –

+0

sql server中列的數據類型是Date .. 而文本框中的值是13-05-1990(dd-mm-yyyy) –

0
  1. 做檢查,如果該列的數據類型設置插入數據庫之前,DATETIME
  2. 使用convert.ToString
相關問題