Как передать системную дату и время в базу данных SQL Server - PullRequest
0 голосов
/ 14 марта 2012

Я хочу получить системную дату и время, используя мою программу C#, и передать ее в базу данных. Я использовал тип данных 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;
}

Ответы [ 2 ]

1 голос
/ 14 марта 2012
    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-инъекций, и вам не нужно это делать.Кроме того, если вы можете, оберните ваше соединение в «использование», тогда вам не нужно беспокоиться о его закрытии.

1 голос
/ 14 марта 2012
SqlParameter param2 = new SqlParameter( "@news_date", SqlDbType.DateTime );  
param2.Value = DateTime.Today;  
command.Parameters.Add( param2 ); 

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...