Puedo eliminar, insertar y actualizar mi programa e intento hacer una inserción llamando a un procedimiento almacenado creado desde mi base de datos.
Este es un inserto de botón que hago que funcione bien.
private void btnAdd_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(dc.Con);
SqlCommand cmd = new SqlCommand("Command String", con);
da.InsertCommand = new SqlCommand("INSERT INTO tblContacts VALUES (@FirstName, @LastName)", con);
da.InsertCommand.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
da.InsertCommand.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastName.Text;
con.Open();
da.InsertCommand.ExecuteNonQuery();
con.Close();
dt.Clear();
da.Fill(dt);
}
Este es el inicio del botón para llamar al procedimiento nombrado sp_Add_contact
para agregar un contacto. Los dos parámetros para sp_Add_contact(@FirstName,@LastName)
. Busqué en Google algún buen ejemplo, pero no encontré nada interesante.
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(dc.Con);
SqlCommand cmd = new SqlCommand("Command String", con);
cmd.CommandType = CommandType.StoredProcedure;
???
con.Open();
da. ???.ExecuteNonQuery();
con.Close();
dt.Clear();
da.Fill(dt);
}
c#
asp.net
sql-server
stored-procedures
ado.net
FrankSharp
fuente
fuente
Respuestas:
Es casi lo mismo que ejecutar una consulta. En su código original, está creando un objeto de comando, colocándolo en la
cmd
variable y nunca lo usa. Aquí, sin embargo, lo usará en lugar deda.InsertCommand
.Además, utilice a
using
para todos los objetos desechables, de modo que esté seguro de que están dispuestos correctamente:fuente
ExecuteReader
oExecuteScalar
para llamarlo.ExecuteReader
.Debe agregar parámetros, ya que es necesario para que el SP se ejecute
fuente
parameter.Value = txtfirstname
.cmd.Parameters.Add(String parameterName, Object value)
está en desuso ahora. En lugar de usarcmd.Parameters.AddWithValue(String parameterName, Object value)
Agregar (String parameterName, Object value) ha quedado en desuso. Use AddWithValue (String parameterName, Object value)
fuente
cmd.Parameters.Add
está en desuso?Add
cual tampoco está en desuso.AddWithValue
Tampoco es la mejor manera, ya que infiere el tipo de parámetro del valor del parámetro. Esto a menudo conduce a malos planes de ejecución o conversiones incorrectas. Tampoco valida el parámetro en primer lugar (escriba fe siDatetime
pero pasa aString
). Puede ver aquí que solo loAdd
que toma unObject
segundo argumento está en desuso.AddWithValue
tiene la misma funcionalidad queAdd
conObject
, pero no es la forma preferida. Ambos necesitan inferir el tipo.Como alternativa, tengo una biblioteca que facilita el trabajo con procs: https://www.nuget.org/packages/SprocMapper/
fuente
fuente
Los proveedores de datos .NET consisten en una serie de clases utilizadas para conectarse a una fuente de datos, ejecutar comandos y devolver conjuntos de registros. El objeto de comando en ADO.NET proporciona una serie de métodos de ejecución que se pueden utilizar para realizar las consultas SQL en una variedad de modas.
Un procedimiento almacenado es un objeto ejecutable precompilado que contiene una o más instrucciones SQL. En muchos casos, los procedimientos almacenados aceptan parámetros de entrada y devuelven múltiples valores. Los valores de los parámetros se pueden proporcionar si se escribe un procedimiento almacenado para aceptarlos. A continuación se muestra un procedimiento almacenado de muestra con el parámetro de entrada de aceptación:
El procedimiento almacenado anterior acepta un nombre de país (@COUNTRY VARCHAR (20)) como parámetro y devuelve todos los publicadores del país de entrada. Una vez que CommandType se establece en StoredProcedure, puede usar la colección Parameters para definir parámetros.
El código anterior que pasa el parámetro de país al procedimiento almacenado desde la aplicación C #.
fuente