Mahmoud Omar Ответов: 1

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


у меня есть столбец в листе excel, содержащий такой формат даты(
31.12.2016
)

Как я вставляю этот формат после выбора его в таблицу в sql
это мой код в mvc5.

[HttpPost]
public ActionResult Import(HttpPostedFileBase FileUpload)
{
    //bool fileChoosed = false;
    DataSet ds = new DataSet();
    if (FileUpload != null)
    {
        if (FileUpload.ContentType == "application/vnd.ms-excel" || FileUpload.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
        {
            string filename = FileUpload.FileName;
            string targetpath = Server.MapPath("~/fileUpload/");

            FileUpload.SaveAs(targetpath + filename);

            string pathToExcelFile = targetpath + filename;
            var connectionString = "";
            if (filename.EndsWith(".xls"))
            {
                connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", pathToExcelFile);
            }
            else if (filename.EndsWith(".xlsx"))
            {
                connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", pathToExcelFile);
            }

            OleDbConnection excelConnection = new OleDbConnection(connectionString);
            excelConnection.Open();
            DataTable dt = new DataTable();

            dt = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            if (dt == null)
            {
                return null;
            }

            String[] excelSheets = new String[dt.Rows.Count];
            int t = 0;
            //excel data saves in temp file here.
            foreach (DataRow row in dt.Rows)
            {
                excelSheets[t] = row["TABLE_NAME"].ToString();
                t++;
            }
            OleDbConnection excelConnection1 = new OleDbConnection(connectionString);


            string query = string.Format("Select * from[{0}]", excelSheets[0]);
            using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, excelConnection1))
            {
                dataAdapter.Fill(ds);
            }
            excelConnection.Close();
            if (System.IO.File.Exists(pathToExcelFile))
            {
                System.IO.File.Delete(pathToExcelFile);
            }

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {


                                    string conn = ConfigurationManager.ConnectionStrings["WWMCONNDB"].ConnectionString;
                                    SqlConnection con = new SqlConnection(conn);
                                    // //if customer code found
                                    string s1 = @"SELECT COUNT(*) FROM DATA_CUSTOMERS WHERE customer_id = @customer_id";
                                    SqlCommand sCommand = new SqlCommand(s1, con);
                                    sCommand.Parameters.AddWithValue("@customer_id", ds.Tables[0].Rows[i][11]);
                                    con.Open();
                                    int records = (int)sCommand.ExecuteScalar();
                                    con.Close();
                                    if (records == 0)
                                    {
                                        string s2 = @"SELECT COUNT(*) FROM DATA_NOTIFICATIONS WHERE notification_id = @notification_id";
                                        SqlCommand sCommand2 = new SqlCommand(s2, con);
                                        sCommand2.Parameters.AddWithValue("@notification_id", ds.Tables[0].Rows[i][1].ToString());
                                        con.Open();
                                        int records2 = (int)sCommand.ExecuteScalar();
                                        con.Close();
                                        if (records2 == 0)
                                        {
                                            string Insertquery = "Insert into DATA_CUSTOMERS(customer_id,customer_name,region_id,city_name,address,tele1,tele2) Values('" +
                                            ds.Tables[0].Rows[i][11] + "','" + ds.Tables[0].Rows[i][6].ToString() +
                                            "','" + ds.Tables[0].Rows[i][3] + "', '" +
                                            ds.Tables[0].Rows[i][4].ToString() + "','" +
                                            ds.Tables[0].Rows[i][5].ToString() + "','" +
                                            ds.Tables[0].Rows[i][7].ToString() + "','" +
                                            ds.Tables[0].Rows[i][8].ToString() + "'); insert into DATA_NOTIFICATIONS(notification_id,notificationtype_id,customer_id,notification_date,problem_desc) Values('" +
                                            ds.Tables[0].Rows[i][1] + "','" + ds.Tables[0].Rows[i][0] + "','" +
                                            ds.Tables[0].Rows[i][11] + "','" +
                                            //DateTime.ParseExact(ds.Tables[0].Rows[i][9].ToString(), new string[] { "dd/MM/yyyy", "dd.MM.yyyy" }, null, DateTimeStyles.AssumeLocal) + "','" + problem here //
                                            ds.Tables[0].Rows[i][10].ToString() + "');";
                                            con.Open();
                                            SqlCommand cmd = new SqlCommand(Insertquery, con);
                                            cmd.ExecuteNonQuery();
                                            con.Close();
                                            //fileChoosed = true;
                                            TempData["Success"] = "Succes";
                                        }

            }
        }

    }



    return View();
}


Что я уже пробовал:

Как преобразовать формат даты (
31.12.2016
)

Richard MacCutchan

Почему вы преобразуете значение в строку только для того, чтобы преобразовать его обратно в дату-время? И не используйте конкатенацию строк для построения SQL-команд, используйте правильные параметризованные запросы.

1 Ответов

Рейтинг:
2

Member 11471318

назначьте значение даты переменной

строка datefromexel='ваша дата из поля exel';

DateTime dt=DateTime.ParseExact(datefromexel, "dd/MM/yyyy", CultureInfo.InvariantCulture);