Vous êtes sur la page 1sur 8

Guardar Documentos Word en Base de

Datos SQL mediante C#


Guardar documentos Word a una BD SQL Server, mostrarlos y leerlos.
Empezamos ejecutando el siguiente script en SQL Server.
create database DocBD
go
use DocBD
go
create table documentos (
docId int identity,
doc varbinary (max) not null,
nombre varchar (100) not null
)
go
--Procedimiento para guardar documentos
create procedure P_Doc
@doc varbinary (max),
@nombre varchar (100)
as
begin
insert into documentos values(@doc, @nombre)
end
go

Disear el siguiente formulario:

Establecemos la conexin y base de datos (DocDB), este caso solo queremos mostrar dos campos (docId y
nombre) en el DataGridView, en el Load del formulario escribimos el siguiente codigo:

agragamos tambien las librerias para nuestra conexion


using System.data;
using System.data.SqlClient;
nuestra conexion:
static string CadenaConex = @"Data Source=.\SQLEXPRESS;Initial Catalog =DocBD
;Integrated Security=True;User Instance=True";
SqlConnection cn = new SqlConnection(CadenaConex);
SqlCommand cmd;
SqlDataAdapter da;
DataTable dtb;
string ar = "";
Cargar los documentos en el dataGridView
private void Form1_Load(object sender, EventArgs e)
{
try
{
this.txtRuta.Enabled = false;
txtTitulo.Focus();
cmd = new SqlCommand("select docid,nombre from documentos", cn);
da = new SqlDataAdapter(cmd);
dtb = new DataTable();
da.Fill(dtb);
dataGridView1.DataSource = dtb;
dataGridView1.Columns[1].Width = 250;
cn.Close();
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
para limpiar los textBox
private void Limpiar()
{
txtRuta.Clear();
txtTitulo.Clear();
}

generamos nuesto fichero


private string GenerarNombreFichero()
{
int ultimoTick = 0;
while (ultimoTick == Environment.TickCount)
{
System.Threading.Thread.Sleep(1);
}
ultimoTick = Environment.TickCount;
return DateTime.Now.ToString("yyyyMMddhhmmss") + "." + ultimoTick.ToString();
}

Buscar los Documentos de nuestro equipo


private void btnBuscar_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Title = "Abrir";
open.Filter = "Archivos Docx(*.docx)|*.docx|Archivos doc(*.doc)|*.doc|Todos los
Archivos(*.*)|*.*";
if (open.ShowDialog() == DialogResult.OK)
{
ar = open.FileName;
this.txtRuta.Text = ar;
txtTitulo.Text = open.SafeFileName;
}
}

Guardar el Documento Selecctionado


private void btnGuardar_Click(object sender, EventArgs e)
{
try
{
if (txtRuta.Text != "" && txtTitulo.Text != "")
{
FileStream fs = new FileStream(ar, FileMode.Open);
//Creamos un array de bytes para almacenar los datos ledos por fs.
Byte[] data = new byte[fs.Length];
//Y guardamos los datos en el array data
fs.Read(data, 0, Convert.ToInt32(fs.Length));
if (cn.State == 0)
{
cn.Open();
}
cmd = new SqlCommand("P_Doc", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@doc", SqlDbType.VarBinary).Value = data;
cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 100).Value =
this.txtTitulo.Text;
cmd.ExecuteNonQuery();
MessageBox.Show("Guardado Correctamente");
this.Form1_Load(null, null);
cn.Close();
fs.Close();
Limpiar();
}
else
{
MessageBox.Show("Adjuntar y escribir Ttulo","Error
Guardar",MessageBoxButtons.OK);
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}

Por ultimo Leemos el Documento de nuestra Base de Datos


private void btnLeer_Click(object sender, EventArgs e)
{
try
{
int i = this.dataGridView1.CurrentRow.Index;
int cod = int.Parse(this.dataGridView1.Rows[i].Cells[0].Value.ToString());
cmd = new SqlCommand("select doc from documentos where docId=" + cod + "", cn);
da = new SqlDataAdapter(cmd);
dtb = new DataTable();
da.Fill(dtb);
DataRow f = dtb.Rows[0];
byte[] bits = ((byte[])(f.ItemArray[0]));
string sFile = "tmp" + GenerarNombreFichero() + ".doc";
FileStream fs = new FileStream(sFile, FileMode.Create);
//Y escribimos en disco el array de bytes que conforman el fichero Word
fs.Write(bits, 0, Convert.ToInt32(bits.Length));
fs.Close();
System.Diagnostics.Process obj = new System.Diagnostics.Process();
obj.StartInfo.FileName = sFile;
obj.Start();
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}

Login en 3 capas con procedimiento almacenado


Hola amigos aqui les dejo un login hecho en C# Y SQL Server con la
programación en 3 capas.
Te obtiene tl tipo de usuario para tener restricciones en nuestra
aplicación.
La tabla en SQL Server
?
1 create table Usuario
2 (
id_login int identity primary key,
3 USUARIO varchar(20) NOT NULL CONSTRAINT chUser check(USUARIO <> ''),
4 CONTRASEÑA varchar(20) NOT NULL CONSTRAINT chConrtra check(CONTRASEÑA <> ''),
5 ACCESO varchar(20) NOT NULL CONSTRAINT chAcceso check(ACCESO <> '' AND (ACCESO
6 IN('Administrador','Usuario')))
7 )
Aqui el procedimiento almacenado en SQL Server
?
1
create proc Acceso
2 @user varchar(20),
3 @contra varchar(20)
4 as
5 Select * from Usuario
where USUARIO = @user AND CONTRASEÑA =@contra
6 go
7
Clase Datos en C#
?
1 public DataTable Login(string usu,string con)
2 {
3 DataTable login = new DataTable("Login");
4 SqlConnection sql = new SqlConnection();
try
5 {
6 sql.ConnectionString = Conexion.con;
7
8 SqlCommand sqlCm = new SqlCommand("Acceso", sql);
9 sqlCm.CommandType = CommandType.StoredProcedure;
10
11 sqlCm.Parameters.Add("@user", SqlDbType.VarChar).Value =
usu;
12
13 sqlCm.Parameters.Add("@contra", SqlDbType.VarChar).Value =
14 con;
15
SqlDataAdapter sqlAdp = new SqlDataAdapter(sqlCm);
16 sqlAdp.Fill(login);
17
18 }
19 catch
20 {
login = null;
21 }
22 return login;
23 }
24
Clase Negocio en C#
?
1 public static DataTable Acceso(string us,string con)
2 {
3 DLogin login = new DLogin();
4 return login.Login(us, con);
5 }
Clase Presentacion en C#
?
1 private void button1_Click(object se
2 {
3 DataTable tabla =
NLogin.Acceso(textBox1.Text,textBox
4 if (tabla.Rows.Count ==
5 {
6 MessageBox.Show("No
7 Login", MessageBoxButtons.OK, Messa
8 }
else
9 {
10 FrmInicio obj = new
11 //Aqui obtenemos el
12 por si queremos poner restricciones
obj.tipoUser = tabl
13 obj.nombre = tabla.
14 obj.ShowDialog();
15 this.Hide();
16 }
17 }

Ejemplo
Hacer un Login
en capas |C# y
SQL Server|
jueves, 27 de octubre de 2016

Login un login en 4 Capas.


Para empezar con el desarrollo del programa es necesario tener instalados los lenguajes de
programación de SQL Server y Visual Studio. Para ello se desarrollara en 4 capas (Capa
Entidad, Capa de Datos, Capa de Negocio y La Capa de Presentación).
Lo primero que debemos de hacer es crear las respectivas (Librerías) o archivos (.dll).
-CapaEntidad.
-CapaDatos.
-CapaNegocio.
-CapaPresentacion(El formulario)

1.-EL PROCEDIMIENTO ALMACENADO (SQL Server).

create proc Logeo


@Usuario varchar(20),
@Contrasenia varchar(20)
As
where usuario=@usuario and password=@contrasenia

2.-CAPA ENTIDAD(Visual C#).

public class EntidadLogin


{
public string Usuario { get; set; }
public string Contrasenia { get; set; }
}

3.-CAPA DE DATOS (Visual C#).


//importamos los siguientes packs.
using System.Data;
using System.Data.SqlClient;
using CapaEntidad;

public class DatosLogin


{
SqlConnection cn = new SqlConnection(Conexion.IESGA2017);
public DataTable Login(EntidadLogin e)
{
using (SqlCommand cmd = new SqlCommand("Logeo", cn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Usuario", e.Usuario);
cmd.Parameters.AddWithValue("@Contrasenia", e.Contrasenia);
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
DataTable tbl = new DataTable();
da.Fill(tbl);
return tbl;
}
}
}
}

4.-CAPA NEGOCIO (Visual C#).

//Usamos los siguientes Packs.


using System.Data;
using CapaDatos;
using CapaEntidad;

public class NegocioLogin


{
DatosLogin objDatos = new DatosLogin();
public DataTable LogonN(EntidadLogin e)
{
return objDatos.Login(e);
}
}

5.-CAPA DE PRESENTACIÓN (Visual C#).


// Usamos los siguientes Packs.
using CapaEntidad;
using CapaNegocio;

public partial class FrmLogin : Form


{
public FrmLogin()
{
InitializeComponent();
}
EntidadLogin objEntidad = new EntidadLogin();
NegocioLogin objNegocio = new NegocioLogin();
void Login()//Creando un procedimiento.
{

objEntidad.Usuario = txtUsuario.Text;
objEntidad.Contrasenia = txtContrasenia.Text;

DataTable tbl = objNegocio.LogonN(objEntidad);


if (tbl.Rows.Count == 0)
{
MessageBox.Show("No cohensiden Usuario y Contraseña \n Intentelo nuevamente",
"Acceso al Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtUsuario.Text = "";
txtContrasenia.Text = "";
txtUsuario.Focus();
}
else
{
MessageBox.Show("Bienvenido al Sistema", "Acceso al
Sistema", MessageBoxButtons.OK);
FrmMenuPrincilpal Frm = new FrmMenuPrincilpal();
Frm.Show();
}
}
private void btnIniciar_Click(object sender, EventArgs e)
{
Login();
}
}

Vous aimerez peut-être aussi