La clase authors generada por la utilidadBasada en la tabla authors de la base pubs |
Actualizado: 14/Jul/2004
Autor: Guillermo 'guille' Som
Volver al índice de Generar clases para acceder a una tabla
El código de Visual Basic .NET
'------------------------------------------------------------------------------ ' Clase authors generada automáticamente con CrearClaseSQL ' de la tabla 'authors' de la base 'pubs' ' Fecha: 14/jul/2004 03:48:02 ' ' ©Guillermo 'guille' Som, 2004 '------------------------------------------------------------------------------ Option Strict On Option Explicit On ' Imports System Imports System.Data Imports System.Data.SqlClient ' Public Class authors ' Las variables privadas ' TODO: Revisar los tipos de los campos Private _au_id As System.String Private _au_lname As System.String Private _au_fname As System.String Private _phone As System.String Private _address As System.String Private _city As System.String Private _state As System.String Private _zip As System.String Private _contract As System.Boolean ' ' Este método se usará para ajustar los anchos de las propiedades Private Function ajustarAncho(cadena As String, ancho As Integer) As String Dim sb As New System.Text.StringBuilder(New String(" "c, ancho)) ' devolver la cadena quitando los espacios en blanco ' esto asegura que no se devolverá un tamaño mayor ni espacios "extras" Return (cadena & sb.ToString()).Substring(0, ancho).Trim() End Function ' ' Las propiedades públicas ' TODO: Revisar los tipos de las propiedades Public Property au_id() As System.String Get Return ajustarAncho(_au_id,11) End Get Set(value As System.String) _au_id = value End Set End Property Public Property au_lname() As System.String Get Return ajustarAncho(_au_lname,40) End Get Set(value As System.String) _au_lname = value End Set End Property Public Property au_fname() As System.String Get Return ajustarAncho(_au_fname,20) End Get Set(value As System.String) _au_fname = value End Set End Property Public Property phone() As System.String Get Return ajustarAncho(_phone,12) End Get Set(value As System.String) _phone = value End Set End Property Public Property address() As System.String Get Return ajustarAncho(_address,40) End Get Set(value As System.String) _address = value End Set End Property Public Property city() As System.String Get Return ajustarAncho(_city,20) End Get Set(value As System.String) _city = value End Set End Property Public Property state() As System.String Get Return ajustarAncho(_state,2) End Get Set(value As System.String) _state = value End Set End Property Public Property zip() As System.String Get Return ajustarAncho(_zip,5) End Get Set(value As System.String) _zip = value End Set End Property Public Property contract() As System.Boolean Get Return _contract End Get Set(value As System.Boolean) _contract = value End Set End Property ' Public Default Property Item(index As Integer) As String ' Devuelve el contenido del campo indicado en index ' (el índice corresponde con la columna de la tabla) Get If index = 0 Then Return Me.au_id.ToString() ElseIf index = 1 Then Return Me.au_lname.ToString() ElseIf index = 2 Then Return Me.au_fname.ToString() ElseIf index = 3 Then Return Me.phone.ToString() ElseIf index = 4 Then Return Me.address.ToString() ElseIf index = 5 Then Return Me.city.ToString() ElseIf index = 6 Then Return Me.state.ToString() ElseIf index = 7 Then Return Me.zip.ToString() ElseIf index = 8 Then Return Me.contract.ToString() End If ' Para que no de error el compilador de C# Return "" End Get Set(value As String) If index = 0 Then Me.au_id = value ElseIf index = 1 Then Me.au_lname = value ElseIf index = 2 Then Me.au_fname = value ElseIf index = 3 Then Me.phone = value ElseIf index = 4 Then Me.address = value ElseIf index = 5 Then Me.city = value ElseIf index = 6 Then Me.state = value ElseIf index = 7 Then Me.zip = value ElseIf index = 8 Then Try Me.contract = System.Boolean.Parse(value) Catch Me.contract = False End Try End If End Set End Property Public Default Property Item(index As String) As String ' Devuelve el contenido del campo indicado en index ' (el índice corresponde al nombre de la columna) Get If index = "au_id" Then Return Me.au_id.ToString() ElseIf index = "au_lname" Then Return Me.au_lname.ToString() ElseIf index = "au_fname" Then Return Me.au_fname.ToString() ElseIf index = "phone" Then Return Me.phone.ToString() ElseIf index = "address" Then Return Me.address.ToString() ElseIf index = "city" Then Return Me.city.ToString() ElseIf index = "state" Then Return Me.state.ToString() ElseIf index = "zip" Then Return Me.zip.ToString() ElseIf index = "contract" Then Return Me.contract.ToString() End If ' Para que no de error el compilador de C# Return "" End Get Set(value As String) If index = "au_id" Then Me.au_id = value ElseIf index = "au_lname" Then Me.au_lname = value ElseIf index = "au_fname" Then Me.au_fname = value ElseIf index = "phone" Then Me.phone = value ElseIf index = "address" Then Me.address = value ElseIf index = "city" Then Me.city = value ElseIf index = "state" Then Me.state = value ElseIf index = "zip" Then Me.zip = value ElseIf index = "contract" Then Try Me.contract = System.Boolean.Parse(value) Catch Me.contract = False End Try End If End Set End Property ' ' Campos y métodos compartidos (estáticos) para gestionar la base de datos ' ' La cadena de conexión a la base de datos Private Shared cadenaConexion As String = "Data Source=(local)\NETSDK; Initial Catalog=pubs; Integrated Security=yes;" ' La cadena de selección Public Shared CadenaSelect As String = "SELECT * FROM authors" ' Public Sub New() End Sub Public Sub New(conex As String) cadenaConexion = conex End Sub ' ' Métodos compartidos (estáticos) privados ' ' asigna una fila de la tabla a un objeto authors Private Shared Function row2authors(r As DataRow) As authors ' asigna a un objeto authors los datos del dataRow indicado Dim oauthors As New authors ' oauthors.au_id = r("au_id").ToString() oauthors.au_lname = r("au_lname").ToString() oauthors.au_fname = r("au_fname").ToString() oauthors.phone = r("phone").ToString() oauthors.address = r("address").ToString() oauthors.city = r("city").ToString() oauthors.state = r("state").ToString() oauthors.zip = r("zip").ToString() Try oauthors.contract = System.Boolean.Parse(r("contract").ToString()) Catch oauthors.contract = False End Try ' Return oauthors End Function ' ' asigna un objeto authors a la fila indicada Private Shared Sub authors2Row(oauthors As authors, r As DataRow) ' asigna un objeto authors al dataRow indicado r("au_id") = oauthors.au_id r("au_lname") = oauthors.au_lname r("au_fname") = oauthors.au_fname r("phone") = oauthors.phone r("address") = oauthors.address r("city") = oauthors.city r("state") = oauthors.state r("zip") = oauthors.zip r("contract") = oauthors.contract End Sub ' ' crea una nueva fila y la asigna a un objeto authors Private Shared Sub nuevoauthors(dt As DataTable, oauthors As authors) ' Crear un nuevo authors Dim dr As DataRow = dt.NewRow() Dim oa As authors = row2authors(dr) ' oa.au_id = oauthors.au_id oa.au_lname = oauthors.au_lname oa.au_fname = oauthors.au_fname oa.phone = oauthors.phone oa.address = oauthors.address oa.city = oauthors.city oa.state = oauthors.state oa.zip = oauthors.zip oa.contract = oauthors.contract ' authors2Row(oa, dr) ' dt.Rows.Add(dr) End Sub ' ' Métodos públicos ' ' devuelve una tabla con los datos indicados en la cadena de selección Public Shared Function Tabla() As DataTable Return Tabla(CadenaSelect) End Function Public Shared Function Tabla(sel As String) As DataTable ' devuelve una tabla con los datos de la tabla authors Dim da As SqlDataAdapter Dim dt As New DataTable("authors") ' Try da = New SqlDataAdapter(sel, cadenaConexion) da.Fill(dt) Catch Return Nothing End Try ' Return dt End Function ' Public Shared Function Buscar(sWhere As String) As authors ' Busca en la tabla los datos indicados en el parámetro ' el parámetro contendrá lo que se usará después del WHERE Dim oauthors As authors = Nothing Dim da As SqlDataAdapter Dim dt As New DataTable("authors") Dim sel As String = "SELECT * FROM authors WHERE " & sWhere ' da = New SqlDataAdapter(sel, cadenaConexion) da.Fill(dt) ' If dt.Rows.Count > 0 Then oauthors = row2authors(dt.Rows(0)) End If Return oauthors End Function ' ' Actualizar: Actualiza los datos en la tabla usando la instancia actual ' Si la instancia no hace referencia a un registro existente, se creará uno nuevo ' Para comprobar si el objeto en memoria coincide con uno existente, ' se comprueba si el au_id existe en la tabla. ' TODO: Si en lugar de au_id usas otro campo, indicalo en la cadena SELECT ' También puedes usar la sobrecarga en la que se indica la cadena SELECT a usar Public Function Actualizar() As String ' TODO: Poner aquí la selección a realizar para acceder a este registro ' yo uso el au_id que es el identificador único de cada registro Dim sel As String = "SELECT * FROM authors WHERE au_id = '" & Me.au_id & "'" Return Actualizar(sel) End Function Public Function Actualizar(sel As String) As String ' Actualiza los datos indicados ' El parámetro, que es una cadena de selección, indicará el criterio de actualización ' ' En caso de error, devolverá la cadena empezando por ERROR. Dim cnn As SqlConnection Dim da As SqlDataAdapter Dim dt As New DataTable("authors") ' cnn = New SqlConnection(cadenaConexion) 'da = New SqlDataAdapter(CadenaSelect, cnn) da = New SqlDataAdapter(sel, cnn) da.MissingSchemaAction = MissingSchemaAction.AddWithKey ' '------------------------------------------- ' Esta no es la más óptima, pero funcionará '------------------------------------------- 'Dim cb As New SqlCommandBuilder(da) 'da.UpdateCommand = cb.GetUpdateCommand() ' '-------------------------------------------------------------------- ' Esta está más optimizada pero debes comprobar que funciona bien... '-------------------------------------------------------------------- Dim sCommand As String ' ' El comando UPDATE ' TODO: Comprobar cual es el campo de índice principal (sin duplicados) ' Yo compruebo que sea un campo llamado au_id, pero en tu caso puede ser otro ' Ese campo, (en mi caso au_id) será el que hay que poner al final junto al WHERE. sCommand = "UPDATE authors SET au_lname = @au_lname, au_fname = @au_fname, phone = @phone, address = @address, city = @city, state = @state, zip = @zip, contract = @contract WHERE (au_id = @au_id)" da.UpdateCommand = New SqlCommand(sCommand, cnn) da.UpdateCommand.Parameters.Add("@au_id", SqlDbType.NVarChar, 11, "au_id") da.UpdateCommand.Parameters.Add("@au_lname", SqlDbType.NVarChar, 40, "au_lname") da.UpdateCommand.Parameters.Add("@au_fname", SqlDbType.NVarChar, 20, "au_fname") da.UpdateCommand.Parameters.Add("@phone", SqlDbType.NVarChar, 12, "phone") da.UpdateCommand.Parameters.Add("@address", SqlDbType.NVarChar, 40, "address") da.UpdateCommand.Parameters.Add("@city", SqlDbType.NVarChar, 20, "city") da.UpdateCommand.Parameters.Add("@state", SqlDbType.NVarChar, 2, "state") da.UpdateCommand.Parameters.Add("@zip", SqlDbType.NVarChar, 5, "zip") ' TODO: Comprobar el tipo de datos a usar... da.UpdateCommand.Parameters.Add("@contract", SqlDbType.Bit, 0, "contract") ' Try da.Fill(dt) Catch ex As Exception Return "ERROR: " & ex.Message End Try ' If dt.Rows.Count = 0 Then ' crear uno nuevo Return Crear() Else authors2Row(Me, dt.Rows(0)) End If ' Try da.Update(dt) dt.AcceptChanges() Return "Actualizado correctamente" Catch ex As Exception Return "ERROR: " & ex.Message End Try End Function ' Public Function Crear() As String ' Crear un nuevo registro ' En caso de error, devolverá la cadena de error empezando por ERROR:. Dim cnn As SqlConnection Dim da As SqlDataAdapter Dim dt As New DataTable("authors") ' cnn = New SqlConnection(cadenaConexion) da = New SqlDataAdapter(CadenaSelect, cnn) 'da = New SqlDataAdapter(CadenaSelect, cadenaConexion) da.MissingSchemaAction = MissingSchemaAction.AddWithKey ' '------------------------------------------- ' Esta no es la más óptima, pero funcionará '------------------------------------------- 'Dim cb As New SqlCommandBuilder(da) 'da.InsertCommand = cb.GetInsertCommand() ' '-------------------------------------------------------------------- ' Esta está más optimizada pero debes comprobar que funciona bien... '-------------------------------------------------------------------- Dim sCommand As String ' ' El comando INSERT ' TODO: No incluir el campo de clave primaria incremental ' Yo compruebo que sea un campo llamado au_id, pero en tu caso puede ser otro sCommand = "INSERT INTO authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) VALUES(@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract)" da.InsertCommand = New SqlCommand(sCommand, cnn) da.InsertCommand.Parameters.Add("@au_id", SqlDbType.NVarChar, 11, "au_id") da.InsertCommand.Parameters.Add("@au_lname", SqlDbType.NVarChar, 40, "au_lname") da.InsertCommand.Parameters.Add("@au_fname", SqlDbType.NVarChar, 20, "au_fname") da.InsertCommand.Parameters.Add("@phone", SqlDbType.NVarChar, 12, "phone") da.InsertCommand.Parameters.Add("@address", SqlDbType.NVarChar, 40, "address") da.InsertCommand.Parameters.Add("@city", SqlDbType.NVarChar, 20, "city") da.InsertCommand.Parameters.Add("@state", SqlDbType.NVarChar, 2, "state") da.InsertCommand.Parameters.Add("@zip", SqlDbType.NVarChar, 5, "zip") ' TODO: Comprobar el tipo de datos a usar... da.InsertCommand.Parameters.Add("@contract", SqlDbType.Bit, 0, "contract") ' ' Try da.Fill(dt) Catch ex As Exception Return "ERROR: " & ex.Message End Try ' nuevoauthors(dt, Me) ' Try da.Update(dt) dt.AcceptChanges() Return "Se ha creado un nuevo authors" Catch ex As Exception Return "ERROR: " & ex.Message End Try End Function ' Public Function Borrar() As String ' TODO: Poner aquí la selección a realizar para acceder a este registro ' yo uso el au_id que es el identificador único de cada registro Dim sel As String = "SELECT * FROM authors WHERE au_id = '" & Me.au_id & "'" ' Return Borrar(sel) End Function Public Function Borrar(sel As String) As String ' Borrar el registro al que apunta esta clase ' En caso de error, devolverá la cadena de error empezando por ERROR:. Dim cnn As SqlConnection Dim da As SqlDataAdapter Dim dt As New DataTable("authors") ' cnn = New SqlConnection(cadenaConexion) da = New SqlDataAdapter(sel, cnn) da.MissingSchemaAction = MissingSchemaAction.AddWithKey ' '------------------------------------------- ' Esta no es la más óptima, pero funcionará '------------------------------------------- 'Dim cb As New SqlCommandBuilder(da) 'da.DeleteCommand = cb.GetDeleteCommand() ' ' '-------------------------------------------------------------------- ' Esta está más optimizada pero debes comprobar que funciona bien... '-------------------------------------------------------------------- Dim sCommand As String ' ' El comando DELETE ' TODO: Sólo incluir el campo de clave primaria incremental ' Yo compruebo que sea un campo llamado au_id, pero en tu caso puede ser otro sCommand = "DELETE FROM authors WHERE (au_id = @p1)" da.DeleteCommand = New SqlCommand(sCommand, cnn) da.DeleteCommand.Parameters.Add("@p1", SqlDbType.NVarChar, 11, "au_id") da.DeleteCommand.Parameters.Add("@p2", SqlDbType.Int, 0, "") ' ' da.Fill(dt) ' If dt.Rows.Count = 0 Then Return "ERROR: No hay datos" Else dt.Rows(0).Delete() End If ' Try da.Update(dt) dt.AcceptChanges() Return "Borrado satisfactoriamente" Catch ex As Exception Return "ERROR: " & ex.Message End Try End Function ' End Class...
//------------------------------------------------------------------------------ // Clase authors generada automáticamente con CrearClaseSQL // de la tabla 'authors' de la base 'pubs' // Fecha: 14/jul/2004 03:48:06 // // ©Guillermo 'guille' Som, 2004 //------------------------------------------------------------------------------ using System; using System.Data; using System.Data.SqlClient; // public class authors{ // Las variables privadas // TODO: Revisar los tipos de los campos private System.String _au_id; private System.String _au_lname; private System.String _au_fname; private System.String _phone; private System.String _address; private System.String _city; private System.String _state; private System.String _zip; private System.Boolean _contract; // // Este método se usará para ajustar los anchos de las propiedades private string ajustarAncho(string cadena, int ancho){ System.Text.StringBuilder sb = new System.Text.StringBuilder(new String(' ', ancho)); // devolver la cadena quitando los espacios en blanco // esto asegura que no se devolverá un tamaño mayor ni espacios "extras" return (cadena + sb.ToString()).Substring(0, ancho).Trim(); } // // Las propiedades públicas // TODO: Revisar los tipos de las propiedades public System.String au_id{ get{ return ajustarAncho(_au_id,11); } set{ _au_id = value; } } public System.String au_lname{ get{ return ajustarAncho(_au_lname,40); } set{ _au_lname = value; } } public System.String au_fname{ get{ return ajustarAncho(_au_fname,20); } set{ _au_fname = value; } } public System.String phone{ get{ return ajustarAncho(_phone,12); } set{ _phone = value; } } public System.String address{ get{ return ajustarAncho(_address,40); } set{ _address = value; } } public System.String city{ get{ return ajustarAncho(_city,20); } set{ _city = value; } } public System.String state{ get{ return ajustarAncho(_state,2); } set{ _state = value; } } public System.String zip{ get{ return ajustarAncho(_zip,5); } set{ _zip = value; } } public System.Boolean contract{ get{ return _contract; } set{ _contract = value; } } // public string this[int index]{ // Devuelve el contenido del campo indicado en index // (el índice corresponde con la columna de la tabla) get{ if(index == 0){ return this.au_id.ToString(); }else if(index == 1){ return this.au_lname.ToString(); }else if(index == 2){ return this.au_fname.ToString(); }else if(index == 3){ return this.phone.ToString(); }else if(index == 4){ return this.address.ToString(); }else if(index == 5){ return this.city.ToString(); }else if(index == 6){ return this.state.ToString(); }else if(index == 7){ return this.zip.ToString(); }else if(index == 8){ return this.contract.ToString(); } // Para que no de error el compilador de C# return ""; } set{ if(index == 0){ this.au_id = value; }else if(index == 1){ this.au_lname = value; }else if(index == 2){ this.au_fname = value; }else if(index == 3){ this.phone = value; }else if(index == 4){ this.address = value; }else if(index == 5){ this.city = value; }else if(index == 6){ this.state = value; }else if(index == 7){ this.zip = value; }else if(index == 8){ try{ this.contract = System.Boolean.Parse(value); }catch{ this.contract = false; } } } } public string this[string index]{ // Devuelve el contenido del campo indicado en index // (el índice corresponde al nombre de la columna) get{ if(index == "au_id"){ return this.au_id.ToString(); }else if(index == "au_lname"){ return this.au_lname.ToString(); }else if(index == "au_fname"){ return this.au_fname.ToString(); }else if(index == "phone"){ return this.phone.ToString(); }else if(index == "address"){ return this.address.ToString(); }else if(index == "city"){ return this.city.ToString(); }else if(index == "state"){ return this.state.ToString(); }else if(index == "zip"){ return this.zip.ToString(); }else if(index == "contract"){ return this.contract.ToString(); } // Para que no de error el compilador de C# return ""; } set{ if(index == "au_id"){ this.au_id = value; }else if(index == "au_lname"){ this.au_lname = value; }else if(index == "au_fname"){ this.au_fname = value; }else if(index == "phone"){ this.phone = value; }else if(index == "address"){ this.address = value; }else if(index == "city"){ this.city = value; }else if(index == "state"){ this.state = value; }else if(index == "zip"){ this.zip = value; }else if(index == "contract"){ try{ this.contract = System.Boolean.Parse(value); }catch{ this.contract = false; } } } } // // Campos y métodos compartidos (estáticos) para gestionar la base de datos // // La cadena de conexión a la base de datos private static string cadenaConexion = @"Data Source=(local)\NETSDK; Initial Catalog=pubs; Integrated Security=yes;"; // La cadena de selección public static string CadenaSelect = "SELECT * FROM authors"; // public authors(){ } public authors(string conex){ cadenaConexion = conex; } // // Métodos compartidos (estáticos) privados // // asigna una fila de la tabla a un objeto authors private static authors row2authors(DataRow r){ // asigna a un objeto authors los datos del dataRow indicado authors oauthors = new authors(); // oauthors.au_id = r["au_id"].ToString(); oauthors.au_lname = r["au_lname"].ToString(); oauthors.au_fname = r["au_fname"].ToString(); oauthors.phone = r["phone"].ToString(); oauthors.address = r["address"].ToString(); oauthors.city = r["city"].ToString(); oauthors.state = r["state"].ToString(); oauthors.zip = r["zip"].ToString(); try{ oauthors.contract = System.Boolean.Parse(r["contract"].ToString()); }catch{ oauthors.contract = false; } // return oauthors; } // // asigna un objeto authors a la fila indicada private static void authors2Row(authors oauthors, DataRow r){ // asigna un objeto authors al dataRow indicado r["au_id"] = oauthors.au_id; r["au_lname"] = oauthors.au_lname; r["au_fname"] = oauthors.au_fname; r["phone"] = oauthors.phone; r["address"] = oauthors.address; r["city"] = oauthors.city; r["state"] = oauthors.state; r["zip"] = oauthors.zip; r["contract"] = oauthors.contract; } // // crea una nueva fila y la asigna a un objeto authors private static void nuevoauthors(DataTable dt, authors oauthors){ // Crear un nuevo authors DataRow dr = dt.NewRow(); authors oa = row2authors(dr); // oa.au_id = oauthors.au_id; oa.au_lname = oauthors.au_lname; oa.au_fname = oauthors.au_fname; oa.phone = oauthors.phone; oa.address = oauthors.address; oa.city = oauthors.city; oa.state = oauthors.state; oa.zip = oauthors.zip; oa.contract = oauthors.contract; // authors2Row(oa, dr); // dt.Rows.Add(dr); } // // Métodos públicos // // devuelve una tabla con los datos indicados en la cadena de selección public static DataTable Tabla(){ return Tabla(CadenaSelect); } public static DataTable Tabla(string sel){ // devuelve una tabla con los datos de la tabla authors SqlDataAdapter da; DataTable dt = new DataTable("authors"); // try{ da = new SqlDataAdapter(sel, cadenaConexion); da.Fill(dt); }catch{ return null; } // return dt; } // public static authors Buscar(string sWhere){ // Busca en la tabla los datos indicados en el parámetro // el parámetro contendrá lo que se usará después del WHERE authors oauthors = null; SqlDataAdapter da; DataTable dt = new DataTable("authors"); string sel = "SELECT * FROM authors WHERE " + sWhere; // da = new SqlDataAdapter(sel, cadenaConexion); da.Fill(dt); // if(dt.Rows.Count > 0){ oauthors = row2authors(dt.Rows[0]); } return oauthors; } // // Actualizar: Actualiza los datos en la tabla usando la instancia actual // Si la instancia no hace referencia a un registro existente, se creará uno nuevo // Para comprobar si el objeto en memoria coincide con uno existente, // se comprueba si el au_id existe en la tabla. // TODO: Si en lugar de au_id usas otro campo, indicalo en la cadena SELECT // También puedes usar la sobrecarga en la que se indica la cadena SELECT a usar public string Actualizar(){ // TODO: Poner aquí la selección a realizar para acceder a este registro // yo uso el au_id que es el identificador único de cada registro string sel = "SELECT * FROM authors WHERE au_id = '" + this.au_id + "'"; return Actualizar(sel); } public string Actualizar(string sel){ // Actualiza los datos indicados // El parámetro, que es una cadena de selección, indicará el criterio de actualización // // En caso de error, devolverá la cadena empezando por ERROR. SqlConnection cnn; SqlDataAdapter da; DataTable dt = new DataTable("authors"); // cnn = new SqlConnection(cadenaConexion); //da = new SqlDataAdapter(CadenaSelect, cnn); da = new SqlDataAdapter(sel, cnn); da.MissingSchemaAction = MissingSchemaAction.AddWithKey; // //------------------------------------------- // Esta no es la más óptima, pero funcionará //------------------------------------------- //SqlCommandBuilder cb = new SqlCommandBuilder(da); //da.UpdateCommand = cb.GetUpdateCommand(); // //-------------------------------------------------------------------- // Esta está más optimizada pero debes comprobar que funciona bien... //-------------------------------------------------------------------- string sCommand; // // El comando UPDATE // TODO: Comprobar cual es el campo de índice principal (sin duplicados) // Yo compruebo que sea un campo llamado au_id, pero en tu caso puede ser otro // Ese campo, (en mi caso au_id) será el que hay que poner al final junto al WHERE. sCommand = "UPDATE authors SET au_lname = @au_lname, au_fname = @au_fname, phone = @phone, address = @address, city = @city, state = @state, zip = @zip, contract = @contract WHERE (au_id = @au_id)"; da.UpdateCommand = new SqlCommand(sCommand, cnn); da.UpdateCommand.Parameters.Add("@au_id", SqlDbType.NVarChar, 11, "au_id"); da.UpdateCommand.Parameters.Add("@au_lname", SqlDbType.NVarChar, 40, "au_lname"); da.UpdateCommand.Parameters.Add("@au_fname", SqlDbType.NVarChar, 20, "au_fname"); da.UpdateCommand.Parameters.Add("@phone", SqlDbType.NVarChar, 12, "phone"); da.UpdateCommand.Parameters.Add("@address", SqlDbType.NVarChar, 40, "address"); da.UpdateCommand.Parameters.Add("@city", SqlDbType.NVarChar, 20, "city"); da.UpdateCommand.Parameters.Add("@state", SqlDbType.NVarChar, 2, "state"); da.UpdateCommand.Parameters.Add("@zip", SqlDbType.NVarChar, 5, "zip"); // TODO: Comprobar el tipo de datos a usar... da.UpdateCommand.Parameters.Add("@contract", SqlDbType.Bit, 0, "contract"); // try{ da.Fill(dt); }catch(Exception ex){ return "ERROR: " + ex.Message; } // if(dt.Rows.Count == 0){ // crear uno nuevo return Crear(); }else{ authors2Row(this, dt.Rows[0]); } // try{ da.Update(dt); dt.AcceptChanges(); return "Actualizado correctamente"; }catch(Exception ex){ return "ERROR: " + ex.Message; } } // public string Crear(){ // Crear un nuevo registro // En caso de error, devolverá la cadena de error empezando por ERROR:. SqlConnection cnn; SqlDataAdapter da; DataTable dt = new DataTable("authors"); // cnn = new SqlConnection(cadenaConexion); da = new SqlDataAdapter(CadenaSelect, cnn); //da = new SqlDataAdapter(CadenaSelect, cadenaConexion); da.MissingSchemaAction = MissingSchemaAction.AddWithKey; // //------------------------------------------- // Esta no es la más óptima, pero funcionará //------------------------------------------- //SqlCommandBuilder cb = new SqlCommandBuilder(da); //da.InsertCommand = cb.GetInsertCommand(); // //-------------------------------------------------------------------- // Esta está más optimizada pero debes comprobar que funciona bien... //-------------------------------------------------------------------- string sCommand; // // El comando INSERT // TODO: No incluir el campo de clave primaria incremental // Yo compruebo que sea un campo llamado au_id, pero en tu caso puede ser otro sCommand = "INSERT INTO authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) VALUES(@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract)"; da.InsertCommand = new SqlCommand(sCommand, cnn); da.InsertCommand.Parameters.Add("@au_id", SqlDbType.NVarChar, 11, "au_id"); da.InsertCommand.Parameters.Add("@au_lname", SqlDbType.NVarChar, 40, "au_lname"); da.InsertCommand.Parameters.Add("@au_fname", SqlDbType.NVarChar, 20, "au_fname"); da.InsertCommand.Parameters.Add("@phone", SqlDbType.NVarChar, 12, "phone"); da.InsertCommand.Parameters.Add("@address", SqlDbType.NVarChar, 40, "address"); da.InsertCommand.Parameters.Add("@city", SqlDbType.NVarChar, 20, "city"); da.InsertCommand.Parameters.Add("@state", SqlDbType.NVarChar, 2, "state"); da.InsertCommand.Parameters.Add("@zip", SqlDbType.NVarChar, 5, "zip"); // TODO: Comprobar el tipo de datos a usar... da.InsertCommand.Parameters.Add("@contract", SqlDbType.Bit, 0, "contract"); // // try{ da.Fill(dt); }catch(Exception ex){ return "ERROR: " + ex.Message; } // nuevoauthors(dt, this); // try{ da.Update(dt); dt.AcceptChanges(); return "Se ha creado un nuevo authors"; }catch(Exception ex){ return "ERROR: " + ex.Message; } } // public string Borrar(){ // TODO: Poner aquí la selección a realizar para acceder a este registro // yo uso el au_id que es el identificador único de cada registro string sel = "SELECT * FROM authors WHERE au_id = '" + this.au_id + "'"; // return Borrar(sel); } public string Borrar(string sel){ // Borrar el registro al que apunta esta clase // En caso de error, devolverá la cadena de error empezando por ERROR:. SqlConnection cnn; SqlDataAdapter da; DataTable dt = new DataTable("authors"); // cnn = new SqlConnection(cadenaConexion); da = new SqlDataAdapter(sel, cnn); da.MissingSchemaAction = MissingSchemaAction.AddWithKey; // //------------------------------------------- // Esta no es la más óptima, pero funcionará //------------------------------------------- //SqlCommandBuilder cb = new SqlCommandBuilder(da); //da.DeleteCommand = cb.GetDeleteCommand(); // // //-------------------------------------------------------------------- // Esta está más optimizada pero debes comprobar que funciona bien... //-------------------------------------------------------------------- string sCommand; // // El comando DELETE // TODO: Sólo incluir el campo de clave primaria incremental // Yo compruebo que sea un campo llamado au_id, pero en tu caso puede ser otro sCommand = "DELETE FROM authors WHERE (au_id = @p1)"; da.DeleteCommand = new SqlCommand(sCommand, cnn); da.DeleteCommand.Parameters.Add("@p1", SqlDbType.NVarChar, 11, "au_id"); da.DeleteCommand.Parameters.Add("@p2", SqlDbType.Int, 0, ""); // // da.Fill(dt); // if(dt.Rows.Count == 0){ return "ERROR: No hay datos"; }else{ dt.Rows[0].Delete(); } // try{ da.Update(dt); dt.AcceptChanges(); return "Borrado satisfactoriamente"; }catch(Exception ex){ return "ERROR: " + ex.Message; } } // }...