2011-10-27 14 views
8

Có cách nào để truy cập CommandText ngay sau khi nó được thực thi không? Tôi có đoạn mã sau:xem sql chính xác sau khi thay thế tham số C#

cmd = new OracleCommand(sql.ToString(), conn); 
cmd.Parameters.Add(new OracleParameter("@parm", parmValue)); 


OracleDataAdapter da = new OracleDataAdapter(cmd); 
DataTable dt = new DataTable(); 
da.Fill(dt); 

Những gì tôi cần biết là chuỗi lệnh sql thực hiện trong cơ sở dữ liệu đã có giá trị parmValue của chứa trong sql. Nói cách khác, tôi không thể thấy chuỗi "@parm" bên trong truy vấn mà thay vào đó là giá trị của chuỗi đó.

Tôi cần điều này để tôi có thể đẩy sql này trong cơ sở dữ liệu nhật ký để tham khảo trong tương lai.

Xin cảm ơn trước.

+2

Ngay cả khi nó thực sự được gửi đến máy chủ sql, nó được parametrized; các biến được khai báo và sau đó được sử dụng bên trong truy vấn. –

+1

có thể trùng lặp của [Làm thế nào để có được câu lệnh SQL được tạo ra từ một đối tượng SqlCommand?] (Http://stackoverflow.com/questions/265192/how-to-get-the-generated-sql-statement-from-a -sqlcommand-object) –

+0

Darn! Đó là câu trả lời của tôi! Bạn tìm thấy các dupe trong khi tôi đã gõ của tôi lên. – David

Trả lời

1

Tôi không chắc về Oracle, nhưng trong RDBMS, tôi làm việc với cá nhân điều này không thể thực hiện được.

Khi tôi cần lấy thông số và xem truy vấn SQL kết quả, tôi đã luôn thực hiện nó bằng cách lặp qua bộ sưu tập tham số trong mã và trích xuất cặp tên/giá trị để ghi lại truy vấn kết quả hoặc tương tự vào cơ sở dữ liệu của chúng tôi lỗi đăng nhập:

StoredProc = InsertCallRecord: Tham số: CallId = 1234; ID Khách hàng = 651; PersonCalling = Dave ...

tôi chỉ làm điều này trên khai thác gỗ lỗi vì đó là một buổi biểu diễn kéo để thực hiện nó trên mọi cuộc gọi, nhưng nó cũng có thể hoạt động trong một kịch bản thử nghiệm .

2

Tôi không chắc chắn nếu Oracle hoạt động chính xác theo cách này, nhưng đối với hầu hết các nhà cung cấp DB khác, truy vấn tham số không được gửi tới máy chủ dưới dạng truy vấn văn bản thuần túy, mà thay vào đó được gửi dưới dạng lệnh Thực thi với thông số thích hợp . Nói cách khác, không có sự thay thế nào xảy ra ở cấp ứng dụng của bạn, chỉ trong bản thân DB. Để xem lệnh thực tế khi chúng đang được thực hiện trên máy chủ, bạn có thể muốn xem xét một dấu vết/bản ghi của cơ sở dữ liệu.

Các vấn đề liên quan