2009-06-06 38 views
14

Tôi đang cố gắng thực hiện một truy vấn hiện đang hoạt động trong phpMyAdmin nhưng nó không hoạt động khi thực thi nó trong .NET bằng cách sử dụng MySqlAdapter. Đây là câu lệnh Sql.Có thể sử dụng biến MySql do người dùng định nghĩa trong .NET MySqlCommand không?

SELECT @rownum := @rownum +1 rownum, t . * 
FROM (
    SELECT @rownum :=0 
) r, (
    SELECT DISTINCT 
    TYPE FROM `node` 
    WHERE TYPE NOT IN ('ad', 'chatroom') 
)t  

Đang sử dụng @rownum để đánh số từng dòng riêng biệt được trả về từ truy vấn vô hướng bên trong của tôi. Nhưng nếu tôi sử dụng nó trong .NET nó giả định rằng @rownum là một tham số và ném một ngoại lệ bởi vì tôi đã không xác định nó.

using (var sqlConnection = new MySqlConnection(SOURCE_CONNECTION)) 
{ 
    sqlConnection.Open(); 

    MySqlDataAdapter sqlAdapter = new MySqlDataAdapter(SqlStatement, sqlConnection); 

    DataTable table = new DataTable(); 
    sqlAdapter.Fill(table); 
    sqlConnection.Close(); 

    return table; 
} 

Bất kỳ ý tưởng nào về cách khắc phục sự cố này? Hoặc cách có thể cho tôi để có được một số dòng?

Trả lời

35

tôi thấy blog này, mà nói, đó là với các phiên bản mới hơn của kết nối .net bạn phải thêm

;Allow User Variables=True 

vào chuỗi kết nối. So sánh câu hỏi SO của tôi How can I use a MySql User Defined Variable in a .NET MySqlCommand?

+1

hoàn hảo và ngắn gọn, cảm ơn bạn! – eruciform

+1

+1 trình tiết kiệm cuộc sống. Cảm ơn. – cgTag

+0

Điều này làm việc cho tôi. Cảm ơn bạn. – theJerm

1

Bạn có thể thêm một cột vào bảng gọi rownum của bạn, sau đó cư nó với các giá trị:

table.Columns.Add("rownum"); 
for (int i=0; i < table.Rows.Count; i++) 
{ 
table.Rows[i]["rownum"] = i; 
} 
+0

Tôi sẽ thành thật, tôi sẽ tránh xa việc tạo số theo cách này theo cách thủ công nhưng tôi có thể xem đây là giải pháp khả thi. Tôi nghĩ rằng thực sự tôi cần phải suy nghĩ lại cách tôi kéo dữ liệu ra. –

3

Phiên bản nào của nhà cung cấp dữ liệu MySQL bạn đang sử dụng? Bạn có thể cần phải cập nhật.

Tôi thấy điều này trong 5.0 documentation:

các phiên bản trước của nhà cung cấp sử dụng biểu tượng '@' để đánh dấu các thông số trong SQL. Điều này không tương thích với biến người dùng MySQL, vì vậy nhà cung cấp hiện sử dụng '?' biểu tượng để định vị các tham số trong SQL. Để hỗ trợ mã cũ hơn, bạn có thể đặt 'cú pháp cũ = yes' trên chuỗi kết nối của mình. Nếu bạn làm điều này, xin lưu ý rằng một ngoại lệ sẽ không được ném nếu bạn không xác định được tham số mà bạn dự định sử dụng trong SQL của mình.

+0

Cảm ơn bạn đã cập nhật. Tôi thấy rằng trong tài liệu cũng vậy. Đó là một phiên bản khá gần đây vì nó đã được tải xuống chỉ một vài tuần trước. Tôi đã thử cú pháp cũ = yes mà không thay đổi hành vi. –

+0

Liên kết dường như đã chết ngay bây giờ. – Bugs

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