我遇到了一些我們正在移植到Mono的應用程序的問題。Mono是否將.NET以不同的方式處理System.Data.SqlCommands?
(爲了參考,.NET運行時是4.0,和單版本是2.6.7。)
編輯:在Mono 2.10.2
此問題仍然存在作爲啓動的一部分的應用程序,它將數據讀入內存。對於這部分,我只是使用內聯SQL命令,但出於某種原因,我看到Linux/Mono(當整個事情在Windows/.NET中工作時)的行爲不一致。
我有一個查詢,在某些情況下工作正常,但在其他情況下沒有。
這個特殊的例子不工作:
var cmd = new SqlCommand("SELECT ID, Name, VATTerritoryID, NativeCurrencyID FROM PricingZones", conn);
var reader = cmd.ExecuteReader();
var objectToLoad = new SomeObjectType();
while (reader.Read())
{
objectToLoad.Property1 = reader.GetInt32(row.GetOrdinal("ID"));
objectToLoad.Property2 = reader.GetString(row.GetOrdinal("Name"));
objectToLoad.Property3 = reader.GetInt32(row.GetOrdinal("VATTerritoryID"));
objectToLoad.Property3 = reader.GetInt32(row.GetOrdinal("NativeCurrencyID"));
}
編輯:爲了便於比較,這裏有一個,它的工作:
var cmd = new SqlCommand("SELECT VATTerritoryID, ProductDescriptionID, VATBandID FROM VATTerritoryBandExceptions", conn);
var reader = cmd.ExecuteReader();
var someOtherObjectToLoad = new SomeOtherObjectType();
while (reader.Read())
{
someOtherObjectToLoad.Property1 = reader.GetInt32(row.GetOrdinal("VATTerritoryID"));
someOtherObjectToLoad.Property2 = reader.GetString(row.GetOrdinal("ProductDescriptionID"));
someOtherObjectToLoad.Property3 = reader.GetInt32(row.GetOrdinal("VATBandID"));
}
我有可能懷疑有向下的差異:
- 外殼(因爲我知道這是不同的Windows/Linux版),但把一切爲小寫一直沒有解決的問題
- 列名(也許單更在乎的保留字?),但似乎與[名]或「名稱」更換名稱並沒有做任何的不同
我曾在第一種情況下錯誤是:
[IndexOutOfRangeException: Array index is out of range.]
at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)
提示有沒有「列1」,在返回的結果集。
(編輯:更新這部分有點爲清楚起見)
奇怪的是,如果我這樣做:
var cmd = new SqlCommand("SELECT ID, Name, VATTerritoryID, NativeCurrencyID FROM PricingZones", conn);
var reader = cmd.ExecuteReader();
var objectToLoad = new SomeObjectType();
while (reader.Read())
{
Console.WriteLine("First row, first column is " + row.GetValue(0));
Console.WriteLine("First row, second column is " + row.GetValue(1));
Console.WriteLine("First row, third column is " + row.GetValue(2));
Console.WriteLine("First row, fourth column is " + row.GetValue(3));
}
輸出是:
First row, first column is 0
First row, second column is New
Array index is out of range.
我認爲一些奇怪的事情在這種情況下Mono框架正在發生,但是我找不到相關的錯誤報告,而且我無法確定爲什麼這隻發生在某些情況下但不是其他人!其他人有過類似的經歷嗎?
編輯:我已經改變了一些報表,以匹配失敗的查詢完全,萬一有與保留字或類似的問題。請注意,我在第二種情況下發出的查詢確實需要四列,看起來只有兩個非常奇怪的查詢返回(0 | New)。
你有*混凝土*它失敗的例子? –
如果您使用'(Int32)reader [「column1」]' –
如果您確定在這兩種情況下使用的是相同的MS SQL Server數據庫,該怎麼辦? – LukeH