2016-11-24 16 views
2

SQL Server認証を使用しているときにSqlBulkCopyコマンドに問題があります。この問題は、Windows認証では発生しません。SqlBulkCopyログインに失敗しました

SqlBulkCopy sbc = new SqlBulkCopy(sqConn.ConnectionString, SqlBulkCopyOptions.KeepIdentity); 

これは、エラーがスローされます。

Login failed for user 'xx'

コード:

SqlBulkCopy sbc = new SqlBulkCopy(sqConn); 

これはうまく動作しますが、ID列元の値を保持していません。

+0

編集者に感謝します。私は次回にコードをブロックに入れることを忘れないでください。 – davehay

答えて

1

からSQLサービスを再起動してください。

using (SqlTransaction transaction = 
       sqConn.BeginTransaction()) 
      { 

       SqlBulkCopy sbc = new SqlBulkCopy(sqConn,SqlBulkCopyOptions.KeepIdentity,transaction); 
       sbc.DestinationTableName = file; 
       sbc.BatchSize = 1000; 
       sbc.NotifyAfter = 1000; 
       sbc.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied); 
       sbc.WriteToServer(SourceTable); 
       transaction.Commit(); 
      } 
+0

解決策は何ですか? AFAICTあなたは認証を変更しませんでした。 – martennis

+1

解決方法はトランザクションを使用することですが、SQL Server認証と連携して動作します。私はAzure AD認証が可能でないAzure SQLテーブルに一括コピーする必要がありました。 – davehay

+0

'新しいSqlBulkCopy()'には、 'SqlConnection'のみ、' SqlConnection/SqlBulkCopyOptions/SqlTransaction'、 'string'のみ、' string/SqlBulkCopyOptions'の4つのオーバーロードがあります。コピーオプションのKeepIdentityを指定する場合は、SqlTransactionに何かを指定する必要があります。そうしないと、コンパイラは/ SqlBulkCopyOptionsという文字列をオーバーライドしようとします。私が知る限り、SqlTransactionのヌルオブジェクトを渡すことからあなたを止めるものは何もありません: 'new SqlBulkCopy(sqConn、SqlBulkCopyOptions.KeepIdentity、null)' – Thorin

0

SQL Serverの混在モード認証がオフになっているように見えます。

DBインスタンスを右クリックし、[プロパティ]を選択します。 セキュリティをクリックし、サーバー認証で2番目のラジオボタンSQL ServerとWindows認証モードを選択します。この後

ソリューションは非常に簡単ですが、私はまだSQLサーバー認証はWindows認証と異なるべきである理由を知って興味を持ってservices.mscと

+0

これが当てはまる場合、SQLBulkCopyの2番目の形式はどちらも機能しません。 – davehay

+0

@davehay:ここで設定ファイル –

+0

で使用している接続文字列を表示してください。接続文字列に「統合セキュリティ」の部分があるかどうか確認してください。その場合は、DB接続文字列から「統合セキュリティ」の部分を削除して、もう一度試してください。 これは、SQL認証の代わりにWindows認証を使用するように接続を設定しています。 –

関連する問題