Carrega
Zeta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
private void Form1_Load(object sender, EventArgs e) {
con = new SQLiteConnection("Data Source=" + mDbPath + ";Version = 3; Compress = True;");
con.Open();
SQLiteCommand command = con.CreateCommand();
command.CommandText = "SELECT name FROM sqlite_master WHERE name='cuenta'";
var name = command.ExecuteScalar();
if (name != null) {
MessageBox.Show("Ya existe");
return;
}
else {
command.CommandText = "CREATE TABLE cuenta (rowID INT, user VARCHAR(20), pass VARCHAR(20))";
command.ExecuteNonQuery();
MessageBox.Show("Tabla creada");
}
con.Close();
}
Ok, ahora voy al cine y mientras he dejado descargando el visual studio que no lo tenía instalado. Cuando vuelva le echo un ojo ��
Enviado desde mi Nexus 4 mediante Tapatalk
- - - Actualizado - - -
Bien, ya lo he solucionado, paso a pegarte el código y te explico los diferentes errores que tenias:
PHP:private void Form1_Load(object sender, EventArgs e) { con = new SQLiteConnection("Data Source=" + mDbPath + ";Version = 3; Compress = True;"); con.Open(); SQLiteCommand command = con.CreateCommand(); command.CommandText = "SELECT name FROM sqlite_master WHERE name='cuenta'"; var name = command.ExecuteScalar(); if (name != null) { MessageBox.Show("Ya existe"); return; } else { command.CommandText = "CREATE TABLE cuenta (rowID INT, user VARCHAR(20), pass VARCHAR(20))"; command.ExecuteNonQuery(); MessageBox.Show("Tabla creada"); } con.Close(); }
Cuando creas la conexión tenias puesto el parámetro new=true, lo que hacia que cada vez que ejecutabas el código creara una nueva base de datos por lo tanto siempre que consultas si la tabla cuenta (le puesto ese nombre) existía te daba null.
No lo he mirado pero imagino que el parámetro new solo habrá que usarlo la primera vez que ejecutes la aplicacion para que cree el archivo físico para la base de datos, por lo tanto antes de realizar la conexión deberías comprobar si existe el archivo de la base de datos o no para saber si utilizar el parámetro new o no.
En mi caso para probar ejecute el programa con el parámetro new para que creara la base de datos y después lo borre para que no me la sobrescribiera (por eso no aparece en el texto que he pegado).
Lo siguiente se mantiene igual, compruebas si la consulta de si existe una tabla llamad "cuenta" devuelve null o no para saltar la creación o realizarla.
Por ultimo y muy importante, SIEMPRE cerrar la conexión a la base de datos.
Espero que con esto puedas continuar con tus pruebas. Y si necesitas alguna aclaración o ayuda pues aquí estamos :encouragement:
command.CommandText = "CREATE TABLE cuenta (rowID INT, user VARCHAR(20), pass VARCHAR(20))";
command.CommandText = "CREATE TABLE contactos (id INT PRIMARY KEY AUTOINCREMENT NOT NULL, nombre VARCHAR(50) NOT NULL, apellido VARCHAR(50), movil VARCHAR(50) NOT NULL, email VARCHAR(50), categoria VARCHAR(50))";
command.CommandText = "SELECT name FROM sqlite_master WHERE name='contactos'";
Contactos frmContactos = new Contactos();
string id = frmContactos.dgvDatos.CurrentRow.Cells[0].Value.ToString(); // Aquí creo una variable id para almacenar el rowid, que sería la primera celda, del contacto seleccionado
// Creamos el comando
SQLiteCommand cmd = con.CreateCommand();
cmd.CommandText = "UPDATE contactos SET nombre = @nombreParam, apellido = @apellidoParam, movil = [MENTION=36130]movil[/MENTION]Param, email = [MENTION=52771]email[/MENTION]Param, categoria = @categoriaParam WHERE rowid = @id";
cmd.Parameters.Add("@nombreParam", SqlDbType.NVarChar).Value = txtNombre.Text;
cmd.Parameters.Add("@apellidoParam", SqlDbType.NVarChar).Value = txtApellidos.Text;
cmd.Parameters.Add( [MENTION=36130]movil[/MENTION]Param", SqlDbType.NVarChar).Value = txtMovil.Text;
cmd.Parameters.Add( [MENTION=52771]email[/MENTION]Param", SqlDbType.NVarChar).Value = txtEmail.Text;
cmd.Parameters.Add("@categoriaParam", SqlDbType.NVarChar).Value = cbCategoria.Text;
cmd.Parameters.Add("@idParam", SqlDbType.NVarChar).Value = id;
DataGridView dgvDatos = ((DataGridView) frmContactos.Controls["dgvDatos"]);
string id = dgvDatos.CurrentRow.Cells[0].Value.ToString();
public static Contactos frmContactos;
public Contactos()
{
InitializeComponent();
frmContactos = this;
}
string id = Contactos.frmContactos.dgvDatos.CurrentRow.Cells[0].Value.ToString();
Contactos frmContactos = new Contactos();
string id = frmContactos.dgvDatos.CurrentRow.Cells[0].Value.ToString();
Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración
Just-In-Time (JIT) en lugar de a este cuadro de diálogo.
************** Texto de la excepción **************
Finisar.SQLite.SQLiteException: unable to open database file
en Finisar.SQLite.sqlite3.Throw()
en Finisar.SQLite.sqlite3.open(String filename)
en Finisar.SQLite.SQLiteConnection.Open()
en Contactos.Utilidades.CrearBD()
en Contactos.Contactos.Contactos_Load(Object sender, EventArgs e)
en System.Windows.Forms.Form.OnLoad(EventArgs e)
en System.Windows.Forms.Form.OnCreateControl()
en System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
en System.Windows.Forms.Control.CreateControl()
en System.Windows.Forms.Control.WmShowWindow(Message& m)
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.ScrollableControl.WndProc(Message& m)
en System.Windows.Forms.Form.WmShowWindow(Message& m)
en System.Windows.Forms.Form.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Ensamblados cargados **************
mscorlib
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1076.0 built by: NETFXREL3STAGE
Código base: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
Contactos
Versión del ensamblado: 1.0.0.0
Versión Win32: 1.0.0.0
Código base: file:///C:/Program%20Files/Alex%20Monr%C3%A1s/Contactos/Contactos.exe
----------------------------------------
System.Windows.Forms
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1055.0 built by: NETFXREL2
Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1075.0 built by: NETFXREL3STAGE
Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1068.2 built by: NETFXREL3STAGE
Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1055.0 built by: NETFXREL2
Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1055.0 built by: NETFXREL2
Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1067.0 built by: NETFXREL3STAGE
Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1055.0 built by: NETFXREL2
Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_es_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
SQLite.NET
Versión del ensamblado: 0.21.1869.3794
Versión Win32: 0.21.1869.3794
Código base: file:///C:/Program%20Files/Alex%20Monr%C3%A1s/Contactos/SQLite.NET.DLL
----------------------------------------
System.Data
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1082.0 built by: NETFXREL3STAGE
Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
mscorlib.resources
Versión del ensamblado: 4.0.0.0
Versión Win32: 4.6.1055.0 built by: NETFXREL2
Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_es_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
************** Depuración JIT **************
Para habilitar la depuración Just In Time (JIT), el archivo de configuración de esta
aplicación o equipo (machine.config) debe tener el
valor jitDebugging establecido en la sección system.windows.forms.
La aplicación también se debe compilar con la depuración
habilitada
Por ejemplo:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
Cuando esté habilitada la depuración JIT, cualquier excepción no controlada
se enviará al depurador JIT registrado en el equipo
en lugar de controlarlo mediante el cuadro de diálogo.
public static string mDbPath = Application.StartupPath + "\\" + "contactos.sqlite";
private static string databaseFilePath;
string docs = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
databaseFilePath = Path.Combine(docs, "contactos.sqlite");
using System;using System.Data.SqlClient;
using System.Data;
using System.Collections;
namespace Rol
{
class ConexionBD
{
//Variables Globales
String cadena = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"C:\\Users\\Ivan\\Documents\\Visual Studio 2015\\Projects\\Rol\\Rol\\Recursos\\Rol.mdf\";Integrated Security=True;Connect Timeout=30";
SqlConnection con = new SqlConnection();
SqlCommand orden = new SqlCommand();
SqlDataReader reader;
//Constructor
public ConexionBD() { con.ConnectionString = cadena; }
//Consultas NonQuery
public void consultaNonQuery(String consulta)
{
con.Open();
orden.CommandText = consulta + "";
orden.CommandType = CommandType.Text;
orden.Connection = con;
orden.ExecuteNonQuery();
con.Close();
}
//Consultas Scalar
public int consultaScalar(String consulta)
{
con.Open();
orden.CommandText = consulta + "";
orden.CommandType = CommandType.Text;
orden.Connection = con;
int datos = (int)orden.ExecuteScalar();
con.Close();
return datos;
}
//Consulta Query estandar
public ArrayList consultaQuery(String consulta)
{
ArrayList datos = new ArrayList();
con.Open();
orden.CommandText = consulta + "";
orden.CommandType = CommandType.Text;
orden.Connection = con;
reader = orden.ExecuteReader();
while (reader.Read())
{
datos.Add(reader.GetString(0));
}
con.Close();
return datos;
}
}
}
using System;
using System.Data;
using System.Windows.Forms;
using Finisar.SQLite;
namespace Contactos
{
public partial class Contactos : Form
{
public static Contactos frmContactos;
public Contactos()
{
InitializeComponent();
frmContactos = this;
}
private void Contactos_Load(object sender, EventArgs e)
{
Utilidades.CrearBD();
Display();
}
private void btnSalir_Click(object sender, EventArgs e)
{
Close();
}
private void btnAñadirContacto_Click(object sender, EventArgs e)
{
AñadirContacto frmAñadirContacto = new AñadirContacto();
frmAñadirContacto.Show();
frmAñadirContacto.FormClosed += new FormClosedEventHandler(frmAñadirContacto_FormClosed);
}
private void frmAñadirContacto_FormClosed(object sender, FormClosedEventArgs e)
{
Display();
}
private void btnEliminar_Click(object sender, EventArgs e)
{
BorrarContacto();
}
private void btnEditar_Click(object sender, EventArgs e)
{
AñadirContacto frmEditarContacto = new AñadirContacto();
// Cargamos los datos del DataGridView en el formulario
frmEditarContacto.txtNombre.Text = dgvDatos.CurrentRow.Cells[1].Value.ToString();
frmEditarContacto.txtApellidos.Text = dgvDatos.CurrentRow.Cells[2].Value.ToString();
frmEditarContacto.txtMovil.Text = dgvDatos.CurrentRow.Cells[3].Value.ToString();
frmEditarContacto.txtEmail.Text = dgvDatos.CurrentRow.Cells[4].Value.ToString();
frmEditarContacto.cbCategoria.Text = dgvDatos.CurrentRow.Cells[5].Value.ToString();
frmEditarContacto.Text = "Editar contacto";
frmEditarContacto.btnEditar.Enabled = true;
frmEditarContacto.btnAceptar.Enabled = false;
frmEditarContacto.Show();
frmEditarContacto.FormClosed += new FormClosedEventHandler(frmEditarContacto_FormClosed);
}
private void frmEditarContacto_FormClosed(object sender, FormClosedEventArgs e)
{
Display();
}
public void Display()
{
try
{
using (SQLiteConnection con = new SQLiteConnection(Utilidades.conString))
{
// Abrimos la conexión
con.Open();
// Creamos un objecto DataTable para hacer referencia a la información retornada por la consulta
DataTable datos = new DataTable();
// Creamos el comando
SQLiteCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT rowid, * FROM contactos;";
// Creamos un objeto adapter con un constructor que recibe como parámetro el comando asociado
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
// Usamos el método Fill() que deposita de forma ordenada los registros en nuestra tabla
da.Fill(datos);
dgvDatos.Rows.Clear();
foreach (DataRow item in datos.Rows)
{
int n = dgvDatos.Rows.Add();
dgvDatos.Rows[n].Cells[0].Value = item[0].ToString();
dgvDatos.Rows[n].Cells[1].Value = item[1].ToString();
dgvDatos.Rows[n].Cells[2].Value = item[2].ToString();
dgvDatos.Rows[n].Cells[3].Value = item[3].ToString();
dgvDatos.Rows[n].Cells[4].Value = item[4].ToString();
dgvDatos.Rows[n].Cells[5].Value = item[5].ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ha ocurrido un error: " + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void BorrarContacto()
{
DialogResult myResult;
myResult = MessageBox.Show("Está seguro de que desea eliminar a " + dgvDatos.CurrentRow.Cells[1].Value.ToString() + "?", "Eliminar contacto", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (myResult == DialogResult.OK)
{
using (SQLiteConnection con = new SQLiteConnection(Utilidades.conString))
{
// Abrimos la conexión
con.Open();
// Creamos el comando
SQLiteCommand cmd = con.CreateCommand();
cmd.CommandText = "DELETE FROM Contactos WHERE rowid = " + dgvDatos.CurrentRow.Cells[0].Value.ToString();
// Ejecutamos el comando
cmd.ExecuteNonQuery();
// Actualizamos la información del DataGridView
Display();
}
}
else
{
return;
}
}
}
}
using Finisar.SQLite;
using System.IO;
using System.Windows.Forms;
namespace Contactos
{
class Utilidades
{
//private static string databaseFilePath;
//string docs = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
//databaseFilePath = Path.Combine(docs, "contactos.sqlite"); // FIX: No reconoce el Path.Combine. Averiguar como crear BD en AppData.
public static string mDbPath = Application.StartupPath + "\\" + "contactos.sqlite";
public static string conString = "Data Source=" + mDbPath + ";Version = 3;Compress = True;";
public static void CrearBD()
{
// Comprobamos si la BD existe o hay que crearla
if (!File.Exists(mDbPath))
{
SQLiteConnection con = new SQLiteConnection("Data Source=" + mDbPath + ";New = True;Version = 3;Compress = True;");
con.Open();
SQLiteCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT name FROM sqlite_master WHERE name='contactos'";
var name = cmd.ExecuteScalar();
if (name != null)
{
return;
}
else
{
// Definimos la estructura
cmd.CommandText = @"CREATE TABLE
contactos (nombre VARCHAR(50) NOT NULL, apellido VARCHAR(50), movil VARCHAR(50) NOT NULL, email VARCHAR(50), categoria VARCHAR(50))";
cmd.ExecuteNonQuery();
}
con.Close();
}
}
public static void LimpiarCampos(Control form)
{
foreach (Control ctrl in form.Controls)
{
if (ctrl is TextBox)
{
(ctrl as TextBox).Clear();
}
if (ctrl is ComboBox)
{
(ctrl as ComboBox).Text = null;
}
}
}
}
}
Borra el archivo de la base de datos fisico del proyecto de visual y prueba a ejecutarlo para descartar que no te este dando problemas el "if (!File.Exists(mDbPath))"
Y no entiendo muy bien la ruta del archivo. Ahora tienes esto:
public static string mDbPath = Application.StartupPath + "" + "contactos.sqlite"
Y antes tenias esto:
string mDbPath = Application.StartupPath + "/Contactos.db";
No recuerdo mucho de las rutas pues era un tema bastante puñetero, pero me llama la atencion el cambio de la orientación de la barra (que lo mismo no tiene nada que ver).
Igualmente asegúrate que cuando ejecutes el ejecutable no tengas abierto el proyecto de visual o la base de datos desde un gestor, ya que si detecta que esta abierto por otro programa te lanza error.
C:\Program Files\Contactos/database.sqlite
using Finisar.SQLite;
using System;
using System.IO;
using System.Windows.Forms;
namespace Contactos
{
class Utilidades
{
public static string appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
public static string databaseFilePath = Path.Combine(appData, "contactos.sqlite");
//public static string mDbPath = Application.StartupPath + "\\" + "contactos.sqlite";
public static string conString = "Data Source=" + databaseFilePath + ";Version = 3;Compress = True;";
public static void CrearBD()
{
// Comprobamos si la BD existe o hay que crearla
if (!File.Exists(databaseFilePath))
{
SQLiteConnection con = new SQLiteConnection("Data Source=" + databaseFilePath + ";New = True;Version = 3;Compress = True;");
con.Open();
SQLiteCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT name FROM sqlite_master WHERE name='contactos'";
var name = cmd.ExecuteScalar();
if (name != null)
{
return;
}
else
{
// Definimos la estructura
cmd.CommandText = @"CREATE TABLE
contactos (nombre VARCHAR(50) NOT NULL, apellido VARCHAR(50), movil VARCHAR(50) NOT NULL, email VARCHAR(50), categoria VARCHAR(50))";
cmd.ExecuteNonQuery();
}
con.Close();
}
}
private static string databaseFilePath;
string docs = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
databaseFilePath = Path.Combine(docs, "contactos.sqlite"); // FIX: No reconoce el Path.Combine. Averiguar como crear BD en AppData.
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?