2014-01-23 5 views
1

Когда моя хранимая процедура используется в моей веб-форме asp, я пытаюсь заставить ее захватить текущее время и дату. Информация будет храниться в столбце с типом данных datetime2. При заполнении моей формы, я получаю это ..int несовместим с datetime2

Операнда типа коллизии: INT несовместима с datetime2

command.Parameters.AddWithValue("@dt2LastLoginDate", SqlDbType.DateTime2); 

Что следует использовать для того, чтобы сохранить дату и время в качестве правильного типа данных?

protected void Submit_Click(object sender, EventArgs e) 
{ 
    try 
    { 

     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegDNMembershipConnectionString"].ConnectionString); 
     con.Open(); 
     SqlCommand command = new SqlCommand("dbo.P_AddAccount"); 
     command.Connection = con; 
     command.CommandType = CommandType.StoredProcedure; 
     command.Parameters.Add(new SqlParameter("@nvcAccountName", TextBoxUN.Text)); 
     command.Parameters.Add(new SqlParameter("@inyAccountLevelCode", 100)); 
     command.Parameters.Add(new SqlParameter("inyCharacterCreateLimit", 4)); 
     command.Parameters.Add(new SqlParameter("@inyCharacterMaxCount", 4)); 
     var param = new SqlParameter("@dt2LastLoginDate", System.Data.SqlDbType.DateTime2); 
     param.Value = DateTime.Now; 
     command.Parameters.Add(param); 
     var wrongParam = new SqlParameter("@dt2LastLoginDate", System.Data.SqlDbType.DateTime2); 
     wrongParam.Value = System.Data.SqlDbType.DateTime2; 
     command.Parameters.Add(new SqlParameter("@vchLastLoginIP", null)); 
     command.Parameters.Add(new SqlParameter("@@IntLastSessionID", null)); 
     command.Parameters.Add(new SqlParameter("@vchJoinIP", null)); 
     command.Parameters.Add(new SqlParameter("@inyPublisherCode", 4)); 
     command.Parameters.Add(new SqlParameter("@inyGenderCode", null)); 
     command.Parameters.Add(new SqlParameter("@DaTBirthDate", null)); 
     command.Parameters.Add(new SqlParameter("@vchPassphrase", TextBoxPass.Text)); 
     command.Parameters.Add(new SqlParameter("@inyNationalityCode", null)); 
     command.Parameters.Add(new SqlParameter("@inyChannelPartnerCode", null)); 
     command.Parameters.Add(new SqlParameter("@EmailAddress", TextBoxEA.Text)); 
     command.Parameters.Add(new SqlParameter("@FullName", TextBoxFN.Text)); 
     command.Parameters.Add(new SqlParameter("@Country", DropDownListCountry.SelectedValue)); 
     command.ExecuteNonQuery(); 
     con.Close(); 


    } 

ответ

1

The SqlDBType.DataTime2 (MSDN reference) является Enum, который будет преобразован в int (значение 33), когда параметр выполняется. Вам необходимо будет указать значение DateTime, которое вы хотите установить в параметре при выполнении. Образец будет выглядеть следующим образом:

var param = new SqlParameter("@dt2LastLoginDate", System.Data.SqlDbType.DateTime2); 
param.Value = System.DateTime.Now; 
command.Parameters.Add(param); 

Это создает новый параметр с именем параметра и типом данных. Затем мы устанавливаем значение параметра DateTime.Now или значение даты по вашему выбору. Наконец, это добавляется в коллекцию параметров.

Теперь в вашем примере метод Parameters.AddWithValue() принимает два параметра. Имя параметра (то есть @dt2LastLoginDate) и значение для установки параметра во время выполнения. Поэтому вы можете переписать это утверждение можно переписать в виде:

var wrongParam = new SqlParameter("@dt2LastLoginDate", System.Data.SqlDbType.DateTime2); 
wrongParam.Value = System.Data.SqlDbType.DateTime2; 

Который, как вы можете увидеть, устанавливает значение на значение перечисления SqlDbType.DateTime2

+0

Когда я добавляю как фрагменты в моем коде это 'DateTime' является «метод», который недопустим в данном контексте. Почему это? – user3219150

+0

Вам определенно не нужны оба фрагмента. Просто используйте первый, второй - просто показывает, почему произошла ошибка. Теперь для вашей проблемы с методом DateTime вы можете переопределить стандартную переменную 'DateTime'. Измените 'param.Value = DateTime.Now;' на 'param.Value = System.DateTime.Now;' – Nico

Смежные вопросы