2012-03-14 55 views
-3

我想使用我的C#程序獲取系統日期和時間並將其傳遞到數據庫。我在SQL Server表中使用了DateTime數據類型。如何將系統日期和時間傳遞到SQL Server數據庫

我用DateTime dt = DateTime.Now;方法獲取系統日期和時間。但我把它傳入數據庫我有以下錯誤。

字符串或二進制數據將被截斷。該聲明已被終止 。

如何解決這個錯誤。

表結構 -

create table Candidates_ElecCenter(
    Cand_ID varchar(10) primary key, 
    Party_ID varchar(3), 
    Name varchar(100), 
    NIC varchar(50), 
    DistrictID varchar(3) , 
    seat varchar(50) , 
    Total_Votes int, 
    year datetime default DATENAME(year, GETDATE()) , 
    Candidate_Type int , 
    CONSTRAINT fk_CandDistrict FOREIGN KEY (DistrictID) REFERENCES District(District_ID), 
    CONSTRAINT fk_Cand_year_Election FOREIGN KEY (year) REFERENCES Election(year), 
    CONSTRAINT fk_Non_Ind_Party_ID_cand FOREIGN KEY (Party_ID) REFERENCES NonIndependent_Poll_Party(Party_ID), 
    CONSTRAINT fk_Ind_Party_ID_cand FOREIGN KEY (Party_ID) REFERENCES Independent_Poll_Party(Party_ID), 
); 

功能:

internal bool InsertDetails(string p, string p_2, string p_3, string p_4, string p_5, string p_6, int sts) 
{ 
    bool status = false; 

    if (conn.State.ToString() == "Closed") 
    { 
     conn.Open(); 
    } 

    SqlCommand newCmd = conn.CreateCommand(); 
    newCmd.Connection = conn; 
    newCmd.CommandType = CommandType.Text; 

    DateTime now = DateTime.Now; 
    newCmd.CommandText = "INSERT INTO Candidates_ElecCenter(Cand_ID,Party_ID,Name,NIC,DistrictID,seat,year,Candidate_Type) VALUES ('" + p + "','" + p_2 + "','" + p_3 + "' ,'" + p_4 + "', '" + p_5 + "', '" + p_6 + "', '" + now + "','" + sts + "')"; 

    newCmd.ExecuteNonQuery(); 

    conn.Close(); 
    status = true; 

    return status; 
} 
+3

你是怎麼試着將它傳遞給數據庫的?請給我們看一些代碼。 – 2012-03-14 09:45:07

+0

你如何形成查詢? – 2012-03-14 09:45:14

+0

你可以顯示你傳遞的值是什麼? – kaj 2012-03-14 09:46:32

回答

1
using(SqlCommand newCmd = conn.CreateCommand()) 
    { 
     newCmd.Connection = conn; 
     newCmd.CommandType = CommandType.Text; 

     DateTime now = DateTime.Now; 
     newCmd.CommandText = "INSERT INTO Candidates_ElecCenter(Cand_ID,Party_ID,Name,NIC,DistrictID,seat,year,Candidate_Type) VALUES (@Cand_ID,@Party_ID,@Name,@NIC,@DistrictID,@seat,@year,@Candidate_Type)"; 

     newCmd.Parameters.AddWithValue("@Cand_ID", p); 
     newCmd.Parameters.AddWithValue("@Party_ID", p_2); 
     newCmd.Parameters.AddWithValue("@Name", p_3); 
     newCmd.Parameters.AddWithValue("@NIC", p_4); 
     newCmd.Parameters.AddWithValue("@DistrictID", p_5); 
     newCmd.Parameters.AddWithValue("@seat", p_6); 
     newCmd.Parameters.AddWithValue("@year", now); 
     newCmd.Parameters.AddWithValue("@Candidate_Type", sts); 

     newCmd.ExecuteNonQuery(); 
    } 

將字符串連接在一起形成查詢會使您面臨SQL注入攻擊的風險,而且您不需要這樣做。 另外,如果你可以,將你的連接封裝在「使用」中,那麼你不必擔心關閉它。

+0

謝謝JonB。 – Shashika 2012-03-25 17:11:01

1
SqlParameter param2 = new SqlParameter("@news_date", SqlDbType.DateTime); 
param2.Value = DateTime.Today; 
command.Parameters.Add(param2); 

這是否幫助?

+0

他可能在DateTime.Now之後。 – 2012-03-14 10:15:18

+0

謝謝Mayank。 – Shashika 2012-03-25 17:12:29

相關問題