2008年9月30日 星期二

MySQL中使用DataTable.Load() 讀取BIGINT型態的欄位時發生( "數值對 Int32 而言太大或太小" )的錯誤!

原始碼如下:
string strConnection = "dataSource=localhost;database=test;user=root;password=1234";
MySqlConnection myConnection = new MySqlConnection(strConnection);
string strCommand = "SELECT AdID FROM Advertisement";
MySqlCommand myCommand = new MySqlCommand(strCommand, myConnection);
DataTable table = new DataTable();
try
{
 myConnection.Open();
 table.Load(myCommand.ExecuteReader()); //此行發生錯誤
}
catch { MessageBox.Show("讀取失敗"); }
finally { myConnection.Close(); }

真是奇怪?
我記得TableLoad的時候會自動判斷資料庫中Column的型態,然後自動對Table新增相對應型態的Column啊,明明Table一開始也沒有指定任何型態,怎麼會發生這樣的事情?

找了很久終於找到原因了。
原來AdID這個Column在資料庫中是"自動遞增(Auto Increment)",結果將此ColumnAuto INC取消,然後將Default Value設為0 錯誤就消失了^^'''

到現在我還是不知道到底是為什麼,兩者看起來似乎沒有什麼關係啊! 有人知道嗎?

沒有留言:

張貼留言