我正在使用数据库存储过程插入我的数据库。它工作正常但是因为它是新的一年,我们创建了一个新的数据库,其中一切都保持不变但数据被删除。问题是存储过程正在处理旧数据库,而不是新数据库。
我检查了表(旧的和新的),一切都是一样的。程序也一样。当我调试它时,它告诉我cmd.ExecuteNonQuery()
已经影响了61行而没有任何错误但表中没有任何内容。
为什么会发生这种情况,我该怎么办,该寻找什么?
我已经发现executeNonQuery
现在给了我-1
这是程序调用:
int selectedRowIndex = dataGridView1.SelectedCells[0].RowIndex;
DataGridViewRow selectedRow = dataGridView1.Rows[selectedRowIndex];
int robaID = Convert.ToInt16(selectedRow.Cells["ROBAID"].Value);
decimal unesenaKolicina = kolicina.Value;
using (FbConnection con = new FbConnection(connectionString_Baza))
{
con.Open();
using (var cmd = new FbCommand("NAPRAVISTAVKU", con)
{
CommandType = CommandType.StoredProcedure
})
{
cmd.Parameters.AddWithValue("@VRDOK", 33);
cmd.Parameters.AddWithValue("@BRDOK", brojDokumenta);
cmd.Parameters.AddWithValue("@ROBAID", robaID);
cmd.Parameters.AddWithValue("@CENA_BEZ_PDV", 0);
cmd.Parameters.AddWithValue("@KOL", unesenaKolicina);
cmd.Parameters.AddWithValue("@RABAT", 0);
cmd.ExecuteNonQuery();
}
con.Close();
}
这是程序本身:
SET TERM ^ ;
ALTER PROCEDURE NAPRAVISTAVKU (
VRDOK smallint,
BRDOK integer,
ROBAID integer,
CENA_BEZ_PDV numeric(15,2),
KOL numeric(15,3),
RABAT numeric(15,2) )
RETURNS (
OK smallint )
AS
DECLARE VARIABLE MAGACINID SMALLINT;
DECLARE VARIABLE MTID VARCHAR(10);
DECLARE VARIABLE NAZIV VARCHAR(50);
DECLARE VARIABLE TARIFAID VARCHAR(3);
DECLARE VARIABLE NABAVNACENA NUMERIC(15, 4);
DECLARE VARIABLE POREZ NUMERIC(15, 2);
BEGIN
OK = 0;
SELECT MAGACINID, MTID FROM DOKUMENT
WHERE VRDOK = :VRDOK AND BRDOK = :BRDOK
INTO :MAGACINID, :MTID;
SELECT NAZIV FROM ROBA WHERE ROBAID = :ROBAID
INTO :NAZIV;
SELECT NABAVNACENA FROM ROBAUMAGACINU
WHERE MAGACINID = :MAGACINID AND ROBAID = :ROBAID
INTO :NABAVNACENA;
IF (CENA_BEZ_PDV = 0) THEN BEGIN
SELECT PRODAJNACENA FROM ROBAUMAGACINU
WHERE MAGACINID = :MAGACINID AND ROBAID = :ROBAID
INTO :CENA_BEZ_PDV;
END
SELECT TARIFAID FROM ROBA WHERE ROBAID = :ROBAID
INTO TARIFAID;
SELECT STOPA FROM TARIFE WHERE TARIFAID = :TARIFAID
INTO :POREZ;
INSERT INTO STAVKA (VRDOK, BRDOK, MAGACINID, ROBAID, VRSTA, NAZIV, NABCENSAPOR, FAKTURNACENA, NABCENABT,
TROSKOVI, NABAVNACENA, PRODCENABP, KOREKCIJA, PRODAJNACENA, DEVIZNACENA, DEVPRODCENA, KOLICINA,
NIVKOL, TARIFAID, IMAPOREZ, POREZ, RABAT, MARZA, TAKSA, AKCIZA, PROSNAB, PRECENA, PRENAB, PROSPROD,
MTID, PT, TREN_STANJE, POREZ_ULAZ, DEVNABCENA, POREZ_IZ)
VALUES (:VRDOK, :BRDOK, :MAGACINID, :ROBAID, 1, :NAZIV, 0, 0, 0,
0, :NABAVNACENA, :CENA_BEZ_PDV, 0, :CENA_BEZ_PDV, 0, 0, :KOL,
0, :TARIFAID, 0, :POREZ, :RABAT, 0, 0, 0, 0, 0, 0, 0,
:MTID, 'P', 0, 0, 0, :POREZ);
SUSPEND;
/* Obrada greske */
WHEN ANY DO
BEGIN
OK = -1;
SUSPEND;
END
END^
SET TERM ; ^
GRANT EXECUTE
ON PROCEDURE NAPRAVISTAVKU TO "PUBLIC";
GRANT EXECUTE
ON PROCEDURE NAPRAVISTAVKU TO SYSDBA;
答案 0 :(得分:2)
在阅读这个问题时,有两个潜在的问题可以解决。
您是否更新了c#中的连接字符串? 申请,如果没有,你很有可能是简单的 在旧数据库中运行存储过程。
您的存储过程可以引用旧数据库if 你已经用旧的DB名称作了前缀(两个数据库都在同一台服务器上)。在哪种情况下你 需要更改您的过程以使用新数据库名称作为前缀。
检查这些问题中的任何一个的简单方法是查询旧数据库,看看您所做的任何最近的更改是否已应用于它。如果您看到更改,则很可能发生上述情况之一。
答案 1 :(得分:1)
问题是我的数据库文件已损坏。从我的服务器(通过终端)复制它时,我的连接会以某种方式丢失毫秒,因为该文件缺少某些部分或某些东西。我尝试复制2-3次,经过第3次,它有效。我不知道是否其他表现在已损坏,但它适用于我需要的这些表。