В листе Excel у меня есть дата в формате dd.MM.yyyy
16.10.2011 (16 как дд, 10 как MM) . Когда я импортирую данные из Excel в SQL Server 2008, я получаю MM.dd.yyyy
, но все равно 16.10.2011 (16 как MM, 10 как dd) . Это не правильно. Я нашел решение по этому вопросу: перейдите в SQL Server 2008 -> Безопасность -> логины -> {свойства пользователя} -> и измените язык по умолчанию для пользователя. С этим решением я получаю в SQL Server 2008 dd.MM.yyyy
16.10.2011 (16 как дд, 10 как ММ) . Есть ли другой способ конвертировать дату в dd.MM.yyyy
формате без изменения языка пользователя?
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\JantarV7Export.xlsx;Extended Properties=Excel 8.0";
OleDbConnection olecon = new OleDbConnection(sConnectionString);
olecon.Open();
OleDbCommand cmd = olecon.CreateCommand();
cmd.CommandText = "SELECT person_id, date_of_hours, number_of_hours FROM [Sheet1$]";
OleDbDataAdapter oda = new OleDbDataAdapter(cmd);
OleDbDataReader odr = cmd.ExecuteReader();
conn.Open();
while (odr.Read())
{
SqlCommand cmd1 = conn.CreateCommand();
cmd1.CommandText = "INSERT INTO test_data values (newid(),'" + odr[0] + "',@date_of_hours,'" + odr[2] + "')";
cmd1.Parameters.Add("@date_of_hours", SqlDbType.DateTime).Value =odr[1];
}
cmd1.ExecuteNonQuery();
olecon.Close();
conn.Close();
Я думаю, что проблема в том, что я вставляю в test_data
данные. Так что я, вероятно, должен как-то конвертировать даты перед вставкой. Что ты предлагаешь? Благодарю. Есть ли такие варианты:
cmd1.CommandText = "INSERT INTO test_data values (newid(),'" + odr[0] +
"',CONVERT(VARCHAR(20),@date_of_hours,104),'" + odr[2] + "')";
cmd1.Parameters.Add("@date_of_hours", SqlDbType.DateTime).Value =odr[1];
(это не работает из-за CONVERT во вставке, но есть какое-то похожее решение) или
CONVERT(VARCHAR(20),@date_of_hours,104) AS [DD:MM:YYYY]
UPDATE
В другой форме я читаю данные через выпадающий список. Показывает 1.10.2011, 2.10.2011, .... до 16.10.2011.
da_test_data = new SqlDataAdapter("SELECT test_data_id, date_of_hours, number_of_hours FROM test_data WHERE _person_id= '" + person_id_person + "' ORDER BY date_of_hours", conn);
dt_test_data = new DataTable();
da_test_data.Fill(dt_test_data);
cb_datum.DataSource = dt_test_data.DefaultView;
cb_datum.ValueMember = "test_data_id";
cb_datum.DisplayMember = "date_of_hours";
И выпадающий список для проектов :
private void cb_datum_SelectedIndexChanged(object sender, EventArgs e)
{
DataRowView drvProjekt = cb_datum.SelectedItem as DataRowView;
if (drvProjekt != null)
{
string date1 = drvProjekt["date_of_hours"].ToString();
DateTime date2 = new DateTime();
date2 =Convert.ToDateTime(date1);
//DateTime date = DateTime.ParseExact(date1, "MMddyyyy hh:mm:ss", null);
//DateTime date = DateTime.ParseExact(date1, "dd.MM.yyyy", System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat);
//object obj = DateTime.ParseExact(dddd, "MM/dd/yyyy hh:mm", null);
conn = new SqlConnection(connectionString);
conn.Open();
da_projekt = new SqlDataAdapter("SELECT projekt_id, name_of_projekt, date_of_start, date_of_end FROM projekt WHERE date_of_start < '" + date2 + "' AND date_of_end > '" + date2 + "' ", conn);
dt_projekt = new DataTable();
da_projekt.Fill(dt_projekt);
cb_projekt_id.DataSource = dt_projekt.DefaultView;
cb_projekt_id.ValueMember = "projekt_id";
cb_projekt_id.DisplayMember = "name_of_projekt";
conn.Close();
}
}
Когда я выбираю 13.10.2011, я получаю ошибку. Дата распознается как MM.dd.yyyy. Я перепробовал все (все в комментариях и многое другое). Ты просто не можешь найти решение.