2013-08-06 63 views
12

Tôi cần phải ràng buộc các tham số trên truy vấn ODBC từ C#. Đây là mã mẫu, nhưng VS nói với tôi rằng có một tham số bị thiếu.Làm cách nào để ràng buộc các tham số thông qua ODBC C#?

OdbcCommand cmd = conn.CreateCommand(); 

cmd.CommandText = "SELECT * FROM user WHERE id = @id"; 
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4; 
OdbcDataReader reader = cmd.ExecuteReader(); 

Cú pháp cho giá trị ràng buộc trên ODBC là gì?

+0

Thông báo lỗi chính xác là gì? – Steve

+0

ERROR [07002] [Microsoft] [Trình điều khiển ODBC Microsoft Access] Parametri không đủ. Previsto 1. Lỗi đó cho biết một tham số bị thiếu. – pava91

+0

ODBC không hỗ trợ các tham số được đặt tên; http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx nó sử dụng thứ tự '?' placeholders - nếu bạn sử dụng Access là có một lý do để sử dụng ODBC thay vì OLEDB (mà sẽ cho phép họ)? –

Trả lời

26

ODBC không thể sử dụng tên thông số. Điều này có nghĩa là chuỗi lệnh sử dụng trình giữ chỗ cho mọi tham số và trình giữ chỗ này là một dấu chấm hỏi, không phải là tên thông số.

OdbcCommand.Parameters

Sau đó, bạn cần phải thêm các thông số trong bộ sưu tập theo thứ tự mà chúng xuất hiện trong chuỗi lệnh

OdbcCommand cmd = conn.CreateCommand(); 
cmd.CommandText = "SELECT * FROM [user] WHERE id = ?"; 
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4; 
OdbcDataReader reader = cmd.ExecuteReader(); 

Bạn cũng có một vấn đề khác, từ USER là một Ltd. từ khóa cho mỗi cơ sở dữ liệu MS Access và nếu bạn muốn sử dụng nó như tên trường hoặc tên bảng thì nó được yêu cầu để bao gồm mọi tham chiếu với dấu ngoặc vuông. Tôi đề nghị, nếu có thể, thay đổi tên bảng đó bởi vì bạn sẽ gặp phải vấn đề này rất thường xuyên.

+0

đúng vậy! cảm ơn – pava91

+0

@ pava91: đánh dấu câu trả lời này là câu trả lời đúng ... – MiMo

6

sử dụng "?" thay cho @ nếu bạn đang sử dụng ODBC.

Cố gắng làm như sau:

OdbcCommand cmd = conn.CreateCommand(); 

cmd.CommandText = "SELECT * FROM user WHERE id = ?"; 
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4; 
OdbcDataReader reader = cmd.ExecuteReader(); 
+1

Tôi dành cả một giờ cố gắng tìm ra điều này, cảm ơn bạn thân !!!! –