Mi duda es esta: Estoy usando Visual Studio 2015, y estoy programando en C# para Windows Forms, el caso que es tengo una variable que está guardada en una base de datos de SQL Server 2008, y el dato que se encuentra allí es de tipo int
. Lo que deseo hacer es tomar el dato que se encuentra en la base de datos y convertirlo a tipo DateTime
para poder sumarlo con otro dato que tengo previamente en mi programa para luego mostrarlo en un DGV. Si alguien me pudiese ayudar con la sintaxis necesaria, se los agradecería.
Editado:
Aclaro lo que se encuentra en la base de datos es una variable que se llama duración
, y es de tipo entero, yo solo puedo realizar consultas a la base de datos, pero no puedo modificar el tipo de dato, lo que deseo hacer es que mediante una consulta hecha desde C#, pueda obtener ese dato y parsárselo si es posible a un dato de tipo datetime
, para posteriormente sumarlo a otro dato del mismo tipo, esto porque me encuentro programando un control para agenda de actividades en la cual las actividades se encuentran dentro de la base de datos y cada una tiene una duración de tiempo ya asignada. Entonces el primer dato que es de tipo datetime
es uno al que llamo HoraInicio
, en el cual el usuario determina a qué hora comienzan sus actividades y lo que deseo hacer es que una vez teniendo la hora de inicio de la agenda, dependiendo el servicio que se agende, se calcule la duración.
Un ejemplo de lo anterior sería algo así:
servicios hora
junta de ejecutivos 09:00 - 11:00
Inventario 11:00 - 11:45
Explicando lo anterior, se toma el servicio "junta de ejecutivos" y se selecciona que el servicio o la agenda empiece a las 9:00. Este dato se guarda como datetime
. Ahora bien, en la base de datos ya está guardado que el servicio "junta de ejecutivos", siempre tendrá una duración de 2hrs
, y lo mismo para inventario, siempre durará 45min
, la suma la pienso hacer con el método datetime.addminutes()
ya que la duración se encuentra en forma de minutos en la base de datos. Lo que intento hacer es que dependiendo el servicio que se haya seleccionado, también se seleccione la duración del mismo y se convierta en un dato de tipo datetime
para sumarlo con el de HoraInicio
, y así poder lograr lo que necesito.
El código que llevo es el siguiente:
class conexion
{
SqlConnection con1;
SqlCommand cmd;
SqlDataReader dr;
public conexion()
{
try
{
con1 = new SqlConnection("Data Source=OROCHI;Initial Catalog=AGENDAS;Persist Security Info=True;User ID=user;Password=holamundo");
con1.Open();
}
catch(Exception ex)
{
MessageBox.Show("Error en la conexión" + ex.ToString());
}
}
El proceso de conexión a la base de datos lo realizo mediante una clase, la cual se llama conexion
, en la cual he realizado el llamado de todos los servicios que se encuentran en la base de datos y los agrego a un ComboBox para desplegarlos en forma de lista.
En el main
intenté hacer esto, pero obviamente no funciona, y la verdad ya lo esperaba, porque no sé ni cómo hacerlo.
void duracion(int tiempo)
{
SqlConnection con2;
SqlCommand cmd2;
SqlDataReader dr2;
try
{
DateTime hora = DateTime.ParseExact(textBox3.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture);
con2 = new SqlConnection("Data Source=OROCHI;Initial Catalog=AGENDAS;Persist Security Info=True;User ID=USER;Password=Holamundo");
con2.Open();
cmd2 = new SqlCommand("select NB_SERVICIO, NO_BLOQUES * 5 from tablas.C_SERVICIO where NB_SERVICIO == '" + comboBox1.Text + "'", con2);
dr2 = cmd2.ExecuteReader();
SqlDataAdapter sda = new SqlDataAdapter("select NO_BLOQUES * 5 from tablas.C_SERVICIO where NB_SERVICIO == '" + comboBox1.Text + "'", con2);
DataTable dt= new DataTable();
sda.Fill(dt);
if (dt.Rows[0][0].ToString() == "1")
{
DateTime horaN = hora;
double minutos = dt.Rows;
}
}
catch(Exception ex) {
MessageBox.Show("Error: " + ex.ToString());
}
}
Otra parte del código que considero que puede ser de útil es esta:
private void button5_Click(object sender, EventArgs e)
{
dataGridView2.Columns["Column2"].DefaultCellStyle.Format = "HH:mm";//<-formato de Horas/minutos
checkedListBox1.Visible = false;
comboBox1.Enabled = false;
comboBox2.Enabled = false;
textBox2.Enabled = false;
button3.Enabled = false;
button2.Enabled = false;
DateTime hora = DateTime.ParseExact(textBox3.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture);
if (checkBox1.Checked == true)
{
dataGridView2.Rows.Add(comboBox1.Text,hora);
}
Lo que se realiza aquí es la toma de datos de la hora de inicio de la agenda a través de un TextBox y se guarda en el tipo de dato, datetime
, y luego se agrega al DGV.
Solo necesitaría saber cómo tomar la duración de la base de datos y agregarlo a la hora de inicio.