c# - ExecuteNonQuery doesn't work -
here code :
document doc = new document(); sqlconnection cnn = ketnoi.getsqlconnection(); cnn.open(); sqltransaction trans = cnn.begintransaction(); doc.setchomuon(false); doc.setgia(txtgia.text.tostring().trim()); doc.setisbn(txtisbn.text.tostring().trim()); doc.setkhosach(txtkhosach.text.tostring().trim()); doc.setmann(cbmangonngu.text.tostring().trim()); doc.setmanxb(cbmanxb.text.tostring().trim()); doc.setmatl(cbmatheloai.text.tostring().trim()); doc.setnoidung(txtnoidung.text.tostring()); doc.setslxb(txtlxb.text.tostring().trim()); doc.setsotrang(txtlxb.text.tostring().trim()); doc.settensach(txttensach.text.tostring().trim()); doc.settgxb(dtbngayxb.text.tostring()); doc.settinhtrang(true); doc.setmangantu(cbmangantu.text.tostring().trim()); doc.setmasach(txtmasach.text.tostring().trim()); sqlcommand cmd = new sqlcommand(); if (rdsach.checked == true) { cmd = new sqlcommand("checkdoc", cnn, trans); } else if (rdsachdt.checked == true) { cmd = new sqlcommand("checkedoc", cnn, trans); } cmd.commandtype = commandtype.storedprocedure; cmd.parameters.addwithvalue(@"isbn", doc.getisbn()); cmd.parameters.addwithvalue(@"masach", doc.getmasach()); sqlparameter paramreturnvalue = new sqlparameter(); paramreturnvalue = cmd.parameters.add("return_value", sqldbtype.int); paramreturnvalue.direction = parameterdirection.returnvalue; try { cmd.executenonquery(); } catch (exception mess) { messagebox.show(mess.message); cnn.close(); } if ((int)cmd.parameters["return_value"].value == 1) { messagebox.show(" isbn existed ! "); cnn.close(); } else if ((int)cmd.parameters["return_value"].value == 0) { cmd.parameters.addwithvalue(@"tensach", doc.gettensach()); cmd.parameters.addwithvalue(@"khosach", doc.getkhosach()); cmd.parameters.addwithvalue(@"noidung", doc.getnoidung()); cmd.parameters.addwithvalue(@"hinhanhpath", doc.gethinhanh()); cmd.parameters.addwithvalue(@"ngayxuatban", datetime.parse(doc.gettgxb())); cmd.parameters.addwithvalue(@"lanxuatban", int.parse(doc.getslxb())); cmd.parameters.addwithvalue(@"sotrang", int.parse(doc.getsotrang())); cmd.parameters.addwithvalue(@"gia", int64.parse(doc.getgia())); cmd.parameters.addwithvalue(@"manxb", int.parse(doc.getmanxb())); cmd.parameters.addwithvalue(@"mangonngu", int.parse(doc.getmann())); cmd.parameters.addwithvalue(@"matl", doc.getmatl()); cmd.parameters.addwithvalue(@"tinhtrang", doc.gettinhtrang()); cmd.parameters.addwithvalue(@"chomuon", doc.getchomuon()); cmd.parameters.addwithvalue(@"mangantu", int.parse(doc.getmangantu())); if (rdsach.checked == true) cmd.commandtext = "insert"; else if (rdsachdt.checked == true) { cmd.commandtext = "insertedoc"; cmd.parameters.addwithvalue(@"filesach", doc.getfilesach()); cmd.parameters.addwithvalue(@"sldown", int64.parse(doc.getsolandown())); cmd.parameters.addwithvalue(@"down", doc.getchophepdown()); } try { cmd.executenonquery(); messagebox.show("success"); cnn.close(); } catch (exception mess) { messagebox.show(mess.message); trans.rollback(); cnn.close(); } } my stored procedures in sql server:
alter proc [dbo].[checkdoc] (@isbn varchar(10), @masach varchar(10)) if exists(select * sach isbn = @isbn or masach=@masach) return 1 else return 0 alter proc [dbo].[insertdoc]( @isbn char(10), @tensach varchar(100), @khosach varchar(5), @noidung varchar(300), @hinhanhpath varchar(50), @ngayxuatban smalldatetime, @lanxuatban int, @sotrang int, @gia bigint, @manxb int, @mangonngu int, @matl char(5), @masach varchar(10), @tinhtrang bit, @chomuon bit, @mangantu int ) insert isbn values( @isbn, @tensach, @khosach, @noidung, @hinhanhpath, @ngayxuatban, @lanxuatban, @sotrang, @gia, @manxb, @mangonngu, @matl ) insert sach values(@isbn, @masach, @tinhtrang, @chomuon, @mangantu) everything ok when debug it. after received message success check in sql server, no row affected. did refresh table , stored procedure works in sql server when call in asp.net, doesn't work. great.
i'm not familiar c# , sql integration, i'm pretty sure you're missing transaction commit in last try-catch block:
try { cmd.executenonquery(); messagebox.show("success"); cnn.close(); } catch (exception mess) { messagebox.show(mess.message); trans.rollback(); cnn.close(); } should like:
try { cmd.executenonquery(); messagebox.show("success"); trans.commit(); cnn.close(); } catch (exception mess) { messagebox.show(mess.message); trans.rollback(); cnn.close(); } note "trans.commit()" before close connection.
Comments
Post a Comment