2012-03-14 13 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

どうやってデータベースに渡しましたか?いくつかのコードを教えてください。 –

+0

どのようにクエリを構成していますか? –

+0

値を渡す内容を表示できますか? – kaj

答えて

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

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

その助けをしていますか?

+0

彼はおそらくDateTime.Nowの後です。 –

+0

ありがとうございます。 – Shashika

関連する問題