1

Here is my 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)) as IF Exists(select * from SACH where 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 ) as insert into ISBN values( @ISBN, @TENSACH, @KHOSACH, @NOIDUNG, @HINHANHPATH, @NGAYXUATBAN, @LANXUATBAN, @SOTRANG, @GIA, @MANXB, @MANGONNGU, @MATL ) insert into SACH values(@ISBN, @MASACH, @TINHTRANG, @CHOMUON, @MANGANTU) 

Everything is ok when I debug it. After I received message success then check in SQL Server, no row affected. I did refresh table and my stored procedure works in SQL Server but when I call it in asp.net, it doesn't work. Any help will be great.

1
  • are you sure with your CommandText, that is, cmd.CommandText = "insert" OR "insertdoc"? Commented May 20, 2013 at 5:52

1 Answer 1

4

I'm not too familiar with C# and Sql integration, but I'm pretty sure you're missing a transaction commit in your last try-catch block:

 try { cmd.ExecuteNonQuery(); MessageBox.Show("success"); cnn.Close(); } catch (Exception mess) { MessageBox.Show(mess.Message); trans.Rollback(); cnn.Close(); } 

should be something like:

 try { cmd.ExecuteNonQuery(); MessageBox.Show("success"); trans.Commit(); cnn.Close(); } catch (Exception mess) { MessageBox.Show(mess.Message); trans.Rollback(); cnn.Close(); } 

Note the "trans.Commit()" before you close the connection.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.