これは表示されません。以前はODBCクラスを使用していませんでしたが、基本的な使用には何も特別なものはありませんでした。そして、この場合を除いて動作します。OdbcDataReaderでSPの結果を読み取ると、エラー22018 - 割り当てのエラーが発生する
ODBC接続を介してパラメータなしでストアドプロシージャを実行し、結果を取得し、行をオブジェクトに解析してローカルDBに挿入する必要があります。テストデータで動作しましたが、実際のデータでは失敗しますが、顧客は他のツールを使用して同じPSを実行することができます...実際の問題は、ライブサーバーで実行する必要があるため、代わりに、TextBoxに出力を書き込む小さなプロジェクトを作成しました。とにかく、コードは次のとおりです。
var ODBCConnection = new OdbcConnection();
ODBCConnection.ConnectionString = "something...";
//using command "exec schema.spName" or "exec schema.spName()" or "{ call schema.spName()}" runs the procedure
//putting only name "schema.spName" gives ERROR [42000]
var cmd = new OdbcCommand("exec schema.spName())", ODBCConnection);
cmd.CommandType = CommandType.StoredProcedure;
DbReader = cmd.ExecuteReader();
int fCount = DbReader.FieldCount;
infoBox1.Text += System.Environment.NewLine + "Results:";
for (int i = 0; i < fCount; i++)
{
String fName = DbReader.GetName(i);
infoBox1.Text += fName + "|";
}
この結果、結果にはすべての列名がリストされ、20個の列があります。
while (DbReader.Read())
{
var row = new RowClass();
for (int i = 0; i < fCount; i++)
{
object val = DbReader.GetValue(i);
//check which column this is and parse it to set properties of RowClass
//Expected values are string, int and decimal
}
}
これは最初の10行が、休憩、それはエラーで列を次のために読み取ろうとするために動作します:
ERROR [22018] [Cache ODBC][State : 22005][Native Code 22005]
[path to .exe]
Error in assignment
ノーのStackTraceなしのInnerException。
最初に10列目をスキップしようとしましたが、最初の10列目以降はすべての列が壊れていました。 私は偶然です...読み込んだ場合、20フィールドがあります...ヌル値は問題ではありませんDBNullを返しますが、他の場所でも動作します(SPではなくselectクエリを実行します)。
クライアントは同じネット環境からsp connectinを実行し、picshotとcsvのデータを送信します。データそのものには何も起きません。
誰でもこれを前に持っていましたか? OdbcDataReaderの代わりに何か他のものを使うべきですか?
ありがとうございます。
.NETとSQL Serverでは、SqlClientが使用するのに最適なプロバイダです。 –
SQLに直接アクセスせずに使用できますか?私はOdbcConnectionが通信する必要があると思ったので、クライアント側の管理者はODBC Administratorを使って接続を設定しました。接続文字列は 'Dsn = name; 'で始まります –
SqlClientでODBC DSNを使用することはできません。代わりに、サーバー、データベース、および認証の設定を外部DSNの依存関係なしで直接接続文字列に指定します。 –