Я работаю с txt файлами, я должен вставить эти данные в базу данных mysql. Поэтому я получаю эту информацию в Datatable
, тогда я могу получить эти данные в моем gridview
и я должен вставить эти данные в базу данных. Я могу это сделать, но у меня проблемы с столбцами даты.
Например, когда я пытаюсь вставить, если у меня есть эта дата в datagridview: 12/01/2018 никаких проблем, но если у меня есть 17/01/2018, не вставляйте, я вручную изменил, и я исследовал его.
это прочитано txt:
string LogAutoriz_fileName = Server.MapPath("~/Files/") + User.Identity.Name.ToString() + "_" + Path.GetFileName(fup_LogAutoriz_File.PostedFile.FileName);
fup_LogAutoriz_File.SaveAs(LogAutoriz_fileName);
DataTable dt = new DataTable();
List<string[]> list = new List<string[]>();
int maxItem = 0;
using (System.IO.TextReader tr = File.OpenText(LogAutoriz_fileName))
{
string line;
while ((line = tr.ReadLine()) != null)
{
string[] items = line.Trim().Split(' ');
if (maxItem <= items.Count())
{
maxItem = items.Count();
}
list.Add(items);
}
//Crear las columnas del DataTable de Datos
dt.Columns.Add("Comprobante", typeof(string));
dt.Columns.Add("Serie_Comprobante", typeof(string));
dt.Columns.Add("Ruc_Emisor", typeof(string));
dt.Columns.Add("RazonSoc_Emisor", typeof(string));
dt.Columns.Add("Fecha_Emision", typeof(string));
dt.Columns.Add("Fecha_Autoriz", typeof(string));
dt.Columns.Add("Tipo_Emision", typeof(string));
dt.Columns.Add("Ident_Receptor", typeof(string));
dt.Columns.Add("Basura", typeof(string));
dt.Columns.Add("Clave_Acceso", typeof(string));
dt.Columns.Add("Numero_Autor", typeof(string));
dt.Columns.Add("Importe_Total", typeof(string));
foreach (var items in list)
{
dt.Rows.Add(items);
}
//cargar al grid
this.gvwAutorizaciones.DataSource = dt;
this.gvwAutorizaciones.DataBind();
И это для вставки каждой записи gridview в базу данных:
try
{
using (MySqlConnection sqlCon = new MySqlConnection(conn))
{
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = "Insert into autorizaciones " +
"(comprobante, Serie_Comprobante, Ruc_Emisor, RazonSoc_Emisor, " +
"Fecha_Emision, Fecha_Autorizacion, " +
"Tipo_Emision, Ident_Receptor, Clave_Acceso, Numero_Autorizacion) " +
"values(" +
"'" + comprob + "', " +
"'" + serComprob + "', " +
"'" + rucEmisor + "', " +
"'" + razSocEmi + "', " +
"'" + FecEmisor + "', " +
"'" + FecAutoriz + "', " +
"'" + tipoEmision + "', " +
"'" + identRecep + "', " +
"'" + claveAcceso + "', " +
"'" + numAutoriz + "')";
cmd.Connection = sqlCon;
sqlCon.Open();
cmd.ExecuteNonQuery();
sqlCon.Close();
}
}
}
catch (MySqlException ex)
{
}
Я называю это в foreach, и я могу вставлять записи, но для дат у меня есть эта проблема.
Есть ли способ форматирования столбца datatable, например "yyyy-mm-dd"?
Если, пожалуйста, кто-нибудь может мне помочь,
большое спасибо
Я полагаю, вы должны изменить тип своего столбца, потому что это тип строки.
DateTime newDate= DateTime.Parse(stringDate);
---> Вы можете использовать это, чтобы преобразовать строку в дату,
или же
string s = "13/5/2014 12:00:00 AM";
var date = DateTime.ParseExact(s, "dd/M/yyyy hh:mm:ss tt",
CultureInfo.InvariantCulture);
Вы можете использовать код выше, чтобы изменить формат даты.
Также вы можете определить тип столбца таблицы данных, прежде чем создавать его, как,
DataColumn colDateTime = new DataColumn("DateTimeCol");
colDateTime.DataType = System.Type.GetType("System.DateTime");
Все, что я имею в виду, я думаю, что у вас проблемы с типом, поэтому я надеюсь, что это поможет.
Большое спасибо Rojalin, я изменил эту часть своего кода:
private void RegistrarAutorizacion()
{
try
{
foreach (GridViewRow grd_Row in this.gvwAutorizaciones.Rows)
{
string Comprobante = Convert.ToString(grd_Row.Cells[0].Text.Replace(" ", ""));
string SerieComprobante = Convert.ToString(grd_Row.Cells[1].Text.Replace(" ", ""));
string RucEmisor = Convert.ToString(grd_Row.Cells[2].Text.Replace(" ", ""));
string RazSocEmisor = Convert.ToString(grd_Row.Cells[3].Text.Replace(" ", ""));
//DateTime FechaEmision = Convert.ToDateTime(grd_Row.Cells[4].Text.Replace(" ", ""));
//DateTime FechaAutorizacion = Convert.ToDateTime(grd_Row.Cells[5].Text.Replace(" ", ""));
var FechaEmision = DateTime.ParseExact(
grd_Row.Cells[4].Text.Replace(" ", ""),
"dd/M/yyyy", CultureInfo.InvariantCulture);
var FechaAutorizacion = DateTime.ParseExact(
grd_Row.Cells[5].Text.Remove(10,9),
"dd/M/yyyy", CultureInfo.InvariantCulture); //file text has time, but for my process is not important the hour
string TipoEmision = Convert.ToString(grd_Row.Cells[6].Text.Replace(" ", ""));
string IdentidadRecepetor = Convert.ToString(grd_Row.Cells[7].Text.Replace(" ", ""));
string ClaveAcceso = Convert.ToString(grd_Row.Cells[9].Text.Replace(" ", ""));
string NumeroAutorizacion = Convert.ToString(grd_Row.Cells[10].Text.Replace(" ", ""));
autorizDL.RegistrarAutorizacion(
Comprobante, SerieComprobante, RucEmisor, RazSocEmisor,
Convert.ToDateTime(FechaEmision),
Convert.ToDateTime(FechaAutorizacion),
TipoEmision, IdentidadRecepetor, ClaveAcceso, NumeroAutorizacion);
}
}
catch (System.FormatException sfex) { }
//catch (Exception ex) { }
}
и я могу вставить новые записи в базу данных. еще раз спасибо.
с уважением
12/01/2018 никаких проблем, но если у меня есть 17/01/2018, не вставляйте
Ваше фактическое значение указано в формате DD/MM/YYYY, но вставляйте mysql в формат MM/DD/YYYY. Таким образом, вы можете отформатировать это значение в столбце MM/DD/YYYY. Я рассматриваю identRecep - это поле Datetime.
try
{
using (MySqlConnection sqlCon = new MySqlConnection(conn))
{
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = "Insert into autorizaciones " +
"(comprobante, Serie_Comprobante, Ruc_Emisor, RazonSoc_Emisor, " +
"Fecha_Emision, Fecha_Autorizacion, " +
"Tipo_Emision, Ident_Receptor, Clave_Acceso, Numero_Autorizacion) " +
"values(@comprob,@serComprob,@rucEmisor,@razSocEmi,@FecEmisor,@FecAutoriz,@tipoEmision,@identRecep,@claveAcceso,@numAutoriz)";
cmd.Parameters.AddWithValue("@comprob", comprob);
cmd.Parameters.AddWithValue("@serComprob", serComprob);
cmd.Parameters.AddWithValue("@razSocEmi", razSocEmi);
cmd.Parameters.AddWithValue("@FecEmisor", FecEmisor);
cmd.Parameters.AddWithValue("@FecAutoriz", FecAutoriz);
cmd.Parameters.AddWithValue("@tipoEmision", tipoEmision);
cmd.Parameters.AddWithValue("@identRecep", DateTime.Parse(identRecep,"MM/DD/YYYY"));
cmd.Parameters.AddWithValue("@claveAcceso", claveAcceso);
cmd.Parameters.AddWithValue("@numAutoriz", numAutoriz);
cmd.Connection = sqlCon;
sqlCon.Open();
cmd.ExecuteNonQuery();
sqlCon.Close();
}
}
}
catch (MySqlException ex)
{
}