
disparadores en sql
Publicado por BathanF (8 intervenciones) el 14/03/2023 16:15:34
En SQL Server, estoy usando un disparador que funciona como se esperaba cuando ejecuto una consulta en la ventana de consulta de SQL Server Management Studio. El objetivo del activador es tomar el valor más reciente de una tabla (donde una identificación coincide con la identificación insertada) y agregarlo a la fila insertada.
Aquí hay algunos fragmentos de mi código C# y el disparador.
También estoy interactuando con la misma base de datos que tiene el disparador usando un DataAdapter en C#. El disparador no se ejecuta cuando uso MyAdapter.update(MyDataTable) para poner nuevos valores en la tabla a la que está asociado el disparador en esta página scaler.
Investigué mucho, pero nadie más parece tener este problema, así que supongo que me estoy perdiendo algo esencial. También soy nuevo en la interacción con la base de datos .Net. Excepto por no disparar el gatillo, el adaptador de datos funciona normalmente (es decir, se inserta y actualiza según sea necesario).
Resumen de la pregunta: el activador funciona en SQL Server pero no se dispara (ni se queja) cuando se usa un adaptador de datos.
¡Gracias por su tiempo y ayuda!
Marvin
Aquí hay algunos fragmentos de mi código C# y el disparador.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
CREATE TRIGGER getLatestCap
ON TestIDTable
AFTER insert
AS
BEGIN
SET NOCOUNT ON;
DECLARE @BID INT;
DECLARE @Date Date;
SET @BID = (SELECT BattID FROM inserted);
SET @Date = (SELECT Test_Date FROM inserted);
SELECT M_Cap, Cap_Date
INTO #tempTable
FROM CapDataTable
WHERE BattID = @BID;
-- Set the Test_Cap entry in TestIDTable to that capacity.
UPDATE TestIDTable
SET Test_Cap = (SELECT M_Cap
FROM #tempTable
WHERE Cap_Date = (SELECT max(Cap_Date)
FROM #tempTable))
WHERE BattID = @BID AND Test_Date = @Date;
END
GO
private void Setup()
{
try
{
string BattSelect = "SELECT * FROM " + tbl;
dt = new DataTable();
Adpt = new SqlDataAdapter(BattSelect, ConnectionStr);
builder = new SqlCommandBuilder(Adpt);
Adpt.Fill(dt);
}
catch (Exception e)
{
MessageBox.Show("While Connecting to "+tbl+": " + e.ToString());
}
}
private void UpdateDB()
{
try
{
Adpt.InsertCommand = builder.GetInsertCommand();
Adpt.UpdateCommand = builder.GetUpdateCommand();
Adpt.Update(dt);
}
catch (Exception e)
{
MessageBox.Show("While Updating " + tbl + ": " + e.ToString());
}
}
También estoy interactuando con la misma base de datos que tiene el disparador usando un DataAdapter en C#. El disparador no se ejecuta cuando uso MyAdapter.update(MyDataTable) para poner nuevos valores en la tabla a la que está asociado el disparador en esta página scaler.
Investigué mucho, pero nadie más parece tener este problema, así que supongo que me estoy perdiendo algo esencial. También soy nuevo en la interacción con la base de datos .Net. Excepto por no disparar el gatillo, el adaptador de datos funciona normalmente (es decir, se inserta y actualiza según sea necesario).
Resumen de la pregunta: el activador funciona en SQL Server pero no se dispara (ni se queja) cuando se usa un adaptador de datos.
¡Gracias por su tiempo y ayuda!
Marvin
Valora esta pregunta


0