2012-02-10 8 views
3

, пожалуйста, помогите мне вставить дату из текстового поля в формате dd-mm-yyyy на sql-сервер. мой код выглядит следующим образом: -как вставить дату из текстового поля в базу данных

 int prio = Convert.ToInt32(Priority.Text); 
     string stdate = planstart.Text; 
     string endate= planend.Text; 

     string actst = actualstart.Text; 
     string acten = actualend.Text; 



      SqlConnection myconnection = new SqlConnection(constring); 
      SqlCommand mycommand = new SqlCommand(); 
      DataSet mydataset = new DataSet(); 
      SqlDataAdapter mydataadapter = new SqlDataAdapter(); 

      myconnection.Open(); 
      mycommand.Connection = myconnection; 
      mycommand.CommandText = " insert into project_status.dbo.Project_Status_Report values('" + projectcode.Text + "','" + projectname.Text + "',(select P_Code from project_status.dbo.Project_Type where Project_Type = '" + projecttype.Text + "')," + prio + ",'" + stdate + "','" + endate + "','" + actst + "','" + acten + "','" + currentstatus.Text + "','" + remark.Text + "','no');"; 

      mycommand.CommandType = CommandType.Text; 
      mycommand.ExecuteNonQuery(); 

и бросает исключение, говоря: - Конверсия удалось при преобразовании даты и/или времени из строки символов.

+1

1) Изучите ** параметризованные запросы **, чтобы защитить себя от SQL-инъекций. 2) Если ваша дата должна быть датой, не рассматривайте ее как строку. Подтвердите, что это действительная дата, конвертируйте ее и укажите в качестве параметра в запросе. –

+0

Можете ли вы сказать мне, как его преобразовать. Потому что я пробовал, но не смог преобразовать. –

+0

если он работает, чем принимать ответ ................. –

ответ

1

Вы должны преобразовать данные в соответствии с вами SQL сервера формиата, таким образом вы можете решить вопрос ..

Попробуйте

String UrDate = "27/12/2011"; 
System.Globalization.DateTimeFormatInfo dateInfo = new System.Globalization.DateTimeFormatInfo(); 
dateInfo.ShortDatePattern = "dd/MM/yyyy"; 
DateTime validDate= Convert.ToDateTime(toDate, dateInfo); 

или

Format String For Dates

// String to DateTime 
String MyString; 
MyString = "1999-09-01 21:34 PM"; 
//MyString = "1999-09-01 21:34 p.m."; //Depends on your regional settings 

DateTime MyDateTime; 
MyDateTime = new DateTime(); 
MyDateTime = DateTime.ParseExact(MyString, "yyyy-MM-dd HH:mm tt", 
             null); 

Марка использование запроса Paramerize для void SQL INJECTION ... make code less error pron Walkthrough: Displaying Data in a Windows Form Using a Parameterized Query

+0

Фактически я принимаю дату в формате dd/mm/yyyy.and, я пробовал вышеуказанный код, но это бросая исключение, говоря, что строка не находится в допустимой дате fomat.as Я новичок, я не знаю об этих вещах, пожалуйста, помогите мне. Спасибо. –

+0

попробуйте отредактировать ответ ..... –

+0

спасибо, что сработало для меня .. –

0

Просто предостережение - вам нужно дезинформировать этот запрос, чтобы предотвратить атаки SQL-инъекций. Рассмотрите возможность использования параметризованных запросов. Читайте об этом, на самом деле это не вопрос этого ответа.

Сначала необходимо создать строго типизированные объекты DateTime, а затем отформатировать их так, как вам нужно вставить. Рассмотрим следующую модификацию кода:

string stdate = DateTime.Parse(planstart.Text).ToString(); 
string endate = DateTime.Parse(planend.Text).ToString(); 

string actst = DateTime.Parse(actualstart.Text).ToString(); 
string acten = DateTime.Parse(actualend.Text).ToString(); 

EDIT

Я удалил параметр строки из ToString(), так что вы можете получить правильную строку DateTime, что это использовать по SQL Server.

+0

спасибо. Но я все еще получаю сообщение об ошибке: -String не был признан действительным DateTime. –

+0

Это могут быть региональные настройки в вашей базе данных. Если тип данных равен дате времени, вам необходимо пройти через объект VALID datetime. Формат, в котором он отображается, зависит от региональных настроек. Попробуйте удалить параметр строки из метода ToString() - он должен учитывать региональные настройки и возвращать действительную строку DateTime. – FarligOpptreden

0
con.Open(); 
string query = "insert_demo"; 
    /* date fromat Stored*/ 
TextBox2.Text = DateTime.Now.ToLongDateString(); 
SqlCommand com = new SqlCommand(query, con); 


com.CommandType = CommandType.StoredProcedure; 

com.Parameters.AddWithValue("@Name", TextBox1.Text.ToString()); 
com.Parameters.AddWithValue("@Date", TextBox2.Text.ToString()); 

com.ExecuteNonQuery();