02/03/2006, 13:23
|
| | Fecha de Ingreso: febrero-2006
Mensajes: 15
Antigüedad: 18 años, 10 meses Puntos: 0 | |
Hola!!!
Bueno aqui te mando un ejemplo de cómo hago yo para actualizar algunos campos de una tabla de una base de datos. Como te dije lo hago a través de procedimientos almacenados. Este caso es de actualizar, pero para insertar es prácticamente lo mismo, sólo cambia el procedimiento de SQL. Lo primero que te pongo es el procedimiento almacenado. En este caso la tabla se llama Reporte y los campos se llaman igual a los parámetros
CREATE PROCEDURE strInsert_Solucion
(
@id_reporte int,
@solucion nvarchar(500),
@fecha_est datetime,
@id_estado int
)
AS
SET NOCOUNT OFF;
UPDATE Reporte SET solucion=@solucion, fecha_est=@fecha_est, id_estado=@id_estado
WHERE (id_reporte=@id_reporte);
GO
A continuación te pongo un ejemplo de cómo lo llamo:
string strConn = "..... " ;//( la cadena de conexión que utilizas normalmente)
SqlConnection conn = new SqlConnection(strConn);
string strSolucion= "[strInsert_Solucion]"; (nombre del procedimiento)
SqlCommand cmmSolucion = new SqlCommand(strSolucion, conn);
cmmSolucion.CommandType = CommandType.StoredProcedure;
/* A continuación agregar los parámetros. Es importante que los nombres de los parámetros, el orden y los tipos de datos sean exactamente igual a cómo los tienes en el proc almacenado*/
SqlParameter myParm = cmmSolucion.Parameters.Add("@id_reporte", System.Data.SqlDbType.Int, 4);
myParm.Direction= ParameterDirection.Input;// parametro de entrada
myParm.Value = Convert.ToInt32(txtCodReport.Text); //el valor lo tomo de un textbox
//2do parametro
myParm = cmmSolucion.Parameters.Add("@solucion", System.Data.SqlDbType.NVarChar, 500);
myParm.Direction= ParameterDirection.Input;
myParm.Value = txtSolucion.Text;
//3er parametro
myParm = cmmSolucion.Parameters.Add("@fecha_est", System.Data.SqlDbType.DateTime, 8);
myParm.Direction= ParameterDirection.Input;
myParm.Value = DateTime.Now;
//4to parametro
myParm = cmmSolucion.Parameters.Add("@id_estado", System.Data.SqlDbType.Int, 4);
myParm.Direction= ParameterDirection.Input;
myParm.Value = 2;
conn.Open();
cmmSolucion.ExecuteNonQuery();
conn.Close();
Otra forma de llamar al procedimiento almacenado es con un command text, y aunque a mi no me gusta, es hasta más fácil porque te quitas el problema de los tipos de datos de los parámetros, pero no sé si puedan entrar en contradicción con los tipos de datos del SQL. Aqui va el ejemplo:
string connectionString = "… " ;
System.Data.SqlClient.SqlConnection connection = new
System.Data.SqlClient.SqlConnection(connectionStri ng);
connection.Open( );
System.Data.SqlClient.SqlCommand command = new
System.Data.SqlClient.SqlCommand( );
command.Connection = connection;
command.CommandType = CommandType.Text;
/* Notar que lo primero es el nombre del procedimiento, y a continuación se va concatenando el valor de los parámetros (en caso necesario hacer las conversiones de tipo correspondientes, para que coincida con los tipos de datos que espera el procedimiento almacenado de SQL) */
command.CommandText= " strInsert_Solucion " + txtCodReport.Text + ", " + txtSolucion.Text + ", " + DateTime.Now + ", " + 2;
SqlDataAdapter dataAdapter = new SqlDataAdapter( );
dataAdapter.SelectCommand = command; // Aqui prueba si es con SelectCommand o con el UpdateCommand del dataAdapter
DataSet dataSet = new DataSet( );
dataAdapter.Fill(dataSet);
connection.Close( );
Bueno espero que te sirva. A mi me funciona bien.
chaitooooo |