非常に奇妙な動作をしています。私はローカルでアプリケーションをテストすると、すべてがIIS Expressの、VisualStudioを2015年の最新のリリースで、正常に動作します更新3.生産時のsqlbulkcopy例外
しかしのWindows Server 2012上でIIS8上で実行されているライブのアプリケーション、時にはそれはしていません。生産の例外を発生させるまったく同じデータファイルを取る場合、私は、アプリケーションによって処理されたデータを記録
System.InvalidOperationException: The given value of type String from the data source cannot be converted to type nvarchar of the specified target column. ---> System.InvalidOperationException: String or binary data would be truncated.
、と私は私のローカルマシン上でそれを実行します。
は時々は、私は次の例外を取得します(プロダクションDBに接続された)、それは素晴らしい作品です。例外なし。私はフィールドで、フィールドをデータをチェックしているため
例外の本当の理由は、DBの列の長さにすることはできません。そして、それは文字列の長さの問題だった場合は、私は例外をローカルにも取得します。
これはDataTableの定義です:
var dt = new DataTable();
dt.Columns.Add("gid", typeof(int));
dt.Columns.Add("season", typeof(string));
dt.Columns.Add("brand", typeof(string));
dt.Columns.Add("brandid", typeof(string));
dt.Columns.Add("pattern", typeof(string));
dt.Columns.Add("width", typeof(string));
dt.Columns.Add("ratio", typeof(string));
dt.Columns.Add("diameter", typeof(string));
dt.Columns.Add("load", typeof(string));
dt.Columns.Add("speed", typeof(string));
dt.Columns.Add("isrunflat", typeof(bool));
dt.Columns.Add("price", typeof(decimal));
dt.Columns.Add("original_descr", typeof(string));
dt.Columns.Add("source", typeof(string));
dt.Columns.Add("createdon", typeof(DateTime));
dt.Columns.Add("updatedon", typeof(DateTime));
dt.Columns.Add("eulgas", typeof(string));
dt.Columns.Add("eulrai", typeof(string));
dt.Columns.Add("eulnc", typeof(string));
dt.Columns.Add("euldb", typeof(string));
そしてこれは、データベースのテーブル定義である:私は私が見つけることができるすべての壁に頭を叩いていますが、それでも何もアイデアが出てくるん
CREATE TABLE [dbo].[grabbed_zero](
[gid] [bigint] NOT NULL,
[season] [nvarchar](50) NOT NULL,
[brand] [nvarchar](50) NOT NULL,
[brandid] [nvarchar](50) NOT NULL,
[pattern] [nvarchar](100) NOT NULL,
[width] [nvarchar](10) NOT NULL,
[ratio] [nvarchar](10) NOT NULL,
[diameter] [nvarchar](10) NOT NULL,
[load] [nvarchar](10) NOT NULL,
[speed] [nvarchar](10) NOT NULL,
[isrunflat] [int] NOT NULL,
[price] [decimal](10, 2) NOT NULL,
[original_descr] [nvarchar](100) NOT NULL,
[source] [nvarchar](50) NOT NULL,
[createdon] [datetime] NOT NULL,
[updatedon] [datetime] NOT NULL,
[EULGAS] [nvarchar](10) NOT NULL,
[EULRAI] [nvarchar](10) NOT NULL,
[EULNC] [nvarchar](10) NOT NULL,
[EULDB] [nvarchar](10) NOT NULL,
)
これが原因かもしれないことについて
誰もが任意のアイデアを持って?
おそらくあなたは 'DataTable'であなたの文字列の列に追加している文字列のいずれかは、その列のためのテーブルで定義された長さの制約をオーバーフロー? –
@KirkWollデバッグ中の文字列の長さを1つずつチェックしましたが、それらは制限内にあります。また、同じデータファイルを本番環境で使用し、開発マシンでローカルに使用すると、ローカルで動作します。同じDB、同じコード、同じデータを使用する。サーバー上のものである必要がありますが、私は何を推測しています。 –
「アプリケーションをリリースモードでローカルに起動します。例外があります。」というエラーが表示されるまで、リリースモードで列を削除します。バグを見つけ出すためには、未知の列よりも特定の列を1つまたは複数指定する方が簡単です。あなたが後で行うことができることの1つは、インサートでそれぞれを実行することです。どの値から問題が発生しているか正確に知ることができます。それは、この奇妙な問題をデバッグするのに役立ちます。 –