Chương trình lỗi khi kết nối cơ sở dữ liệu qua mạng

Lập trình C#.

Ban Điều Hành: qanlh_soft, dieucay555

Chương trình lỗi khi kết nối cơ sở dữ liệu qua mạng

Post Traibien 26-07-2010, 15:27

Mình đang làm chương trình quản lý nhỏ về nhân sự kết nối cơ sở dữ liệu SQL Server 2005.
Khi chạy trên máy đơn thì bình thường, không có lỗi gì. :ym_happy:
Nhưng khi thay đổi kết nối đến cơ sở dữ liệu ở máy khác (Kết nối bằng ip) thì bị xảy ra lỗi như thế này:
System.Data.SqlClient.SqlException: Procedure sp_viewnhansu has no parameters and arguments were supplied.
Dữ liệu không thể nào thực thi được. Lỗi này chỉ xảy ra khi kết nối bằng cơ sở dữ liệu đặt trên máy khác. Còn nếu dùng trực tiếp tại máy đơn thì lại không bị gì. :ym_confused: :ym_confused: :ym_confused:
Rất mong nhận được sự chỉ giáo của các bạn
Traibien
Members
 
Bài viết: 20
Tham gia: 25-05-2009, 12:24

Re: Chương trình lỗi khi kết nối cơ sở dữ liệu qua mạng

Post Traibien 27-07-2010, 14:08

Hix, có bro nào giúp mình với...
Traibien
Members
 
Bài viết: 20
Tham gia: 25-05-2009, 12:24

Re: Chương trình lỗi khi kết nối cơ sở dữ liệu qua mạng

Post qanlh_soft 27-07-2010, 15:42

Store sp_viewnhansu không có tham số và đối số được cung cấp.
Store này chạy khi load chương trình hay đã đăng nhập thành công và thực hiện đc các chức năng khác?
Nếu chắc chắn lỗi do kết nối db máy khác, thì bạn đưa đoạn code đó lên xem đúng chưa.
"Phần mềm giống như s.e.x : nó sẽ thú vị hơn nếu miễn phí" - Linus Torvalds
Hình đại diện
qanlh_soft
Global Moderators
 
Bài viết: 476
Tham gia: 03-06-2008, 08:47

Re: Chương trình lỗi khi kết nối cơ sở dữ liệu qua mạng

Post flyingfox 28-07-2010, 07:54

Bạn nên so sánh lại stored procedure sp_viewnhansu cũa 2 máy có khác nhau không?
flyingfox
Members
 
Bài viết: 198
Tham gia: 15-07-2009, 07:48

Re: Chương trình lỗi khi kết nối cơ sở dữ liệu qua mạng

Post Traibien 28-07-2010, 22:28

Đây là cấu trúc store của mình viết. Mong các bạn trợ giúp hộ mình. Lạ là mình chạy trên máy khác thì ok nhưng cứ backup lại đem qua máy khác restore rồi chạy kết nối tới máy này là lại bị.
Code: Chọn hết
CREATE proc [dbo].[sp_viewnhansu]
as
begin
   declare @MaNV varchar(10)   
   declare @MaPhong varchar(10)
   declare @MaChucVu varchar(5)
   declare @MaTo varchar(10)
   declare @MaDT numeric(18,0)
   declare @MaQT numeric(18,0)
   declare @MaTG numeric(18,0)
   declare @MaCV varchar(5)
   declare @MaNgach varchar(10)
   declare @MaPCK varchar(5)
   declare @TenTo nvarchar(50)
   declare @TenPhong nvarchar(50)
   declare @TenChucVu nvarchar(50)
   declare @TenDT nvarchar(50)
   declare @TenQT nvarchar(50)
   declare @TenTG nvarchar(50)
   declare @TenChucDanh nvarchar(50)
   declare @TenNgach nvarchar(50)
   declare @TenPCK nvarchar(50)
   declare @stt int
   declare @count int
   declare MaPhong_cursor cursor
   for select MaNV, MaPhong, MaChucVu, MaTo, MaDT, MaQT, MaTG, MaCV, MaNgach, MaPCK  from NhanSu
   open MaPhong_cursor
   set @stt = 1
   fetch next from MaPhong_cursor into @MaNV, @MaPhong, @MaChucVu, @MaTo, @MaDT, @MaQT, @MaTG, @MaCV, @MaNgach, @MaPCK
   while (@@fetch_status = 0)
   begin
      Set @count = (Select count(MaNV) From NhanSU)
      if(@stt <= @count)
      begin
         set @stt = @stt + 1
         Set @TenTo = (Select TenTo From DMToNghiepVu where MaTo = @MaTo)
         Set @TenPhong = (Select TenPhong From DMPhong where MaPhong = @MaPhong)
         Set @TenChucVu = (Select TenChucVu From DMChucVu where MaChucVu = @MaChucVu)
         Set @TenDT = (Select TenDT From DMDanToc where MaDT = @MaDT)
         Set @TenQT = (Select TenQT From DMQuocTich where MaQT = @MaQT)
         Set @TenTG = (Select TenTG From DMTonGiao where MaTG = @MaTG)
         Set @TenNgach = (Select TenNgach From DMNgach where MaNgach = @MaNgach)
         Set @TenChucDanh = (Select TenChucDanh From DMChucDanh where MaCV = @MaCV)
         Set @TenPCK = (Select DienGiai From DMPhucapkhac where MaPCK = @MaPCK)
         Select MaNV, HotenDem + '  ' + Ten as HoTen, Gioitinh, NgaySinh, CMND, @TenTo as TenTo, @TenPhong as TenPhong, @TenChucVu as TenChucVu, @TenDT as TenDT, @TenQT as TenQT,
         @TenTG as TenTG, @TenNgach as TenNgach, @TenChucDanh as TenChucDanh, @TenPCK as TenPCK
         From NhanSu Where MaNV = @MaNV
         fetch next from MaPhong_cursor into @MaNV, @MaPhong, @MaChucVu, @MaTo, @MaDT, @MaQT, @MaTG, @MaCV, @MaNgach, @MaPCK
      end
      else break
   end
   close MaPhong_cursor
   deallocate MaPhong_cursor
end
Traibien
Members
 
Bài viết: 20
Tham gia: 25-05-2009, 12:24

Re: Chương trình lỗi khi kết nối cơ sở dữ liệu qua mạng

Post Traibien 29-07-2010, 21:43

Mình thử lại với việc detach cơ sở dữ liệu này và attach lại qua máy khác sau đó kết nối thì được.
Nhưng khi backup và restore thì lại bị.
Rất mong mọi người chỉ giúp
Traibien
Members
 
Bài viết: 20
Tham gia: 25-05-2009, 12:24

Re: Chương trình lỗi khi kết nối cơ sở dữ liệu qua mạng

Post flyingfox 30-07-2010, 07:31

bạn nên viết stored procedure lại như sau:
Code: Chọn hết
CREATE proc [dbo].[sp_viewnhansu]
as begin
   Select a.MaNV, a.HotenDem + '  ' + a.Ten as HoTen, a.Gioitinh, a.NgaySinh, a.CMND,
        b.TenTo as TenTo,
        c.TenPhong as TenPhong,
        d.TenChucVu as TenChucVu,
        e.TenDT as TenDT,
        f.TenQT as TenQT,
        g.TenTG as TenTG,
        h.TenNgach as TenNgach,
        l.TenChucDanh as TenChucDanh,
        k.TenPCK as TenPCK
   From NhanSu a
   Left Join DMToNghiepVu b ON a.MaTo = b.MaTo
   Left Join DMPhong c ON a.MaPhong = c.MaPhong
   Left Join DMChucVu d ON a.MaChucVu = d.MaChucVu
   Left Join DMDanToc e ON a.MaDT = e.MaDT
   Left Join DMQuocTich f ON a.MaQT = f.MaQT
   Left Join DMTonGiao g ON a.MaTG = g.MaTG
   Left Join DMNgach h ON a.MaNgach = h.MaNgach
   Left Join DMChucDanh l ON a.MaCV = l.MaCV
   Left Join DMPhucapkhac k ON a.MaPCK = k.MaPCK
end
flyingfox
Members
 
Bài viết: 198
Tham gia: 15-07-2009, 07:48

Re: Chương trình lỗi khi kết nối cơ sở dữ liệu qua mạng

Post Traibien 01-08-2010, 16:44

Trước hết cảm ơn các bro đã chỉ giúp. Bài này mình sửa được rồi. :ym_big_grin:
Do viết cái store không đúng với thiết kế ban đầu. :ym_angel: :ym_angel: Ban đầu có cái store chạy dùng cursor để duyệt sau đó viết thêm cái mới lại dùng lại cái store cũ mà không xem lại thiết kế :ym_tongue: . Mình đã sửa lại code và truyền thêm tham số vào. Ban đầu duyệt sẽ dùng cái store có sử dụng cursor để duyệt lấy ra từng dòng tin và truy vấn lại sử dụng cái store procedure thông tin nhân sự này.
Còn khi truy vấn view thông tin chi tiết sẽ phải truyền tham số là Mã nhân viên vào khi người dùng click chọn muốn xem nhân viên nào đó.
Đã test lại trong mạng nội bộ và kết quả OK. :ym_whew: :ym_whew: :ym_whew:
Mình cũng có góp ý với bạn thế này. Sở dĩ mình dùng truy vấn lồng bởi nếu như khi có giá trị NULL chưa nhập liệu đủ, chảng hạn như có nhân viên có ở trong tổ nghiệp vụ này, có nhân viên không nằm trong một tổ nghiệp vụ nào thì khi đó giá trị mã tổ sẽ là null. Và khi ta kết các bảng dữ liệu lại với nhau thì kết quả sẽ không ra được giá trị vì khi kết null sẽ vẫn là null. Tuy nhiên cách của bạn dùng cũng sẽ đảm bảo được các value phải luôn khác null. Thanks bạn một lần nữa.
flyingfox wrote:bạn nên viết stored procedure lại như sau:
Code: Chọn hết
CREATE proc [dbo].[sp_viewnhansu]
as begin
   Select a.MaNV, a.HotenDem + '  ' + a.Ten as HoTen, a.Gioitinh, a.NgaySinh, a.CMND,
        b.TenTo as TenTo,
        c.TenPhong as TenPhong,
        d.TenChucVu as TenChucVu,
        e.TenDT as TenDT,
        f.TenQT as TenQT,
        g.TenTG as TenTG,
        h.TenNgach as TenNgach,
        l.TenChucDanh as TenChucDanh,
        k.TenPCK as TenPCK
   From NhanSu a
   Left Join DMToNghiepVu b ON a.MaTo = b.MaTo
   Left Join DMPhong c ON a.MaPhong = c.MaPhong
   Left Join DMChucVu d ON a.MaChucVu = d.MaChucVu
   Left Join DMDanToc e ON a.MaDT = e.MaDT
   Left Join DMQuocTich f ON a.MaQT = f.MaQT
   Left Join DMTonGiao g ON a.MaTG = g.MaTG
   Left Join DMNgach h ON a.MaNgach = h.MaNgach
   Left Join DMChucDanh l ON a.MaCV = l.MaCV
   Left Join DMPhucapkhac k ON a.MaPCK = k.MaPCK
end
Traibien
Members
 
Bài viết: 20
Tham gia: 25-05-2009, 12:24


Trở về C#

Ai đang truy cập

Đang xem diễn đàn này: 0 thành viên và 2 khách