2012-06-06 16 views
8

Vì vậy, trong C# bất cứ khi nào tôi lấy một tinyint từ cơ sở dữ liệu MSSQL của tôi, tôi sử dụng các diễn viên sau đây.Làm cách nào để lấy một kiểu dữ liệu nhỏ xíu từ MySQL trong C#?

(int)(byte)reader["MyField"]; 

Tuy nhiên, dàn diễn viên đó dường như không hoạt động trong MySQL.

Những gì tôi đã cố gắng

(byte)reader["MyField"]; 

và chỉ

(int)reader["MyField"]; 

Sửa 1

Exception

The specified cast is not valid. 

Chỉnh sửa 2

Đây là kiểu dữ liệu.

{Name = "SByte" FullName = "System.SByte"} 
+0

Bạn có thể cung cấp thêm mã không? – craig1231

+0

Bạn đã thử 'reader [" MyField "] + 0;'? –

+0

@Hans Điều đó sẽ không biên dịch: biểu thức được nhập vào 'đối tượng + int' ở đó, mà không có toán tử' + 'nào phù hợp. –

Trả lời

8

Vấn đề là do đúc và các nhà khai thác rõ ràng:

(byte)objectExpression là không giống như (byte)sbyteExpression.

Đầu tiên là [trực tiếp] truyền không thành công vì loại đối tượng thực là sbyte và không byte. Cách thứ hai sẽ thực hiện chuyển đổi chỉ xảy ra khi sử dụng toán tử rõ ràng (một "Chuyển đổi rõ ràng") với cú pháp, không may, vẫn là trông như [trực tiếp] truyền như trên. Dưới đây là một ví dụ về nó không sans-cơ sở dữ liệu:

var obj = (object)(sbyte)0; 
var i1 = (int)(sbyte)obj; // okay: object (cast)-> sbyte (conversion)-> int 
var i2 = (int)obj;   // fail: sbyte (cast)-> int (but sbyte is not int!) 

Hoặc sử dụng một dàn diễn viên (sbyte)objectExpression có giá trị cho các loại đối tượng thực sự, hoặc Convert.ToInt32(objectExpression) mà phải mất một object và hiện một số phép thuật để chuyển đổi nó đến một int . (Sử dụng Convert.ToByte có thể ném một ngoại lệ trên tràn.)

Chúc mừng mã hóa!

+0

Chính xác! phải đợi 6 phút. – meanbunny

+1

+1, nghiêm túc điều này đã cắn tôi luôn và rời khỏi không biết gì, cho đến khi tôi đọc câu trả lời này! – nawfal

9

Để xác định loại thích hợp, nhìn vào giá trị của

reader["MyField"].GetType() 

trong trình gỡ lỗi.

+2

Một thiên tài của bạn! Hãy để tôi nhìn thật nhanh – meanbunny

+2

(Một bình luận tuyệt vời ... nhưng nó không trả lời "làm thế nào để" như và của chính nó ...) –

+6

Tôi cố gắng giúp mọi người tự giúp mình. – usr

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