エラー -2147217900: LabVIEWでSQLストアドプロシージャを実行するとエラーが発生する

更新しました Nov 21, 2023

使用製品

ソフトウェア

  • LabVIEW
  • Database Connectivity Toolkit

その他

  • Microsoft SQL Server 2019
  • Microsoft SQL Server Management Studio

問題

ストアドプロシージャを使用して、LabVIEW Database Connectivity Toolkitを使用して8000文字より長い文字列をSQLサーバに挿入しようとしていますが、LabVIEWで次のエラーが発生します。

Error -2147217900 occurred at NI_Database_API.lvlib:Cmd Execute vi:

Possible reason(s):

ADO Error: 0x80040E14

Exception occured in Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][ODBC SQL Server Driver][SQL Server]Procedure or function '<procedure name>' expects parameter '<parameter name>', which was not supplied. in NI_Database_API.lvlib:Rec Create - Command.vi->NI_Database_API.lvlib:Cmd Execute.vi->Simple Procedure.vi


以下は、エラーメッセージです。
image.png

挿入する文字列の長さが8000文字以下の場合、エラーは表示されず、情報はSQLテーブルに正しく挿入されます。テーブルフィールドをvarchar(max)データ型に設定しています。これにより、8000バイトより長い文字列を使用できます。また、Microsoft SQL Server Management Studioでクエリを手動で作成して同じテーブルに文字列を挿入する場合、エラーは発生せず、文字列はテーブルに正しく挿入されます。
 

解決策

このエラーは、LabVIEWからSQLサーバへの接続に使用される基礎となるドライバによって発生する可能性があります。このエラーが発生した場合は、データベースへの接続を開くときに使用されているドライバまたはプロバイダを確認してください。たとえば、次の接続文字列を使用する場合、8000文字を超える文字列を挿入するためにストアドプロシージャを呼び出すと、このエラーが発生する可能性があります。
Driver = SQL Server ; Server = ServerName; Database = DatabaseName; Trusted_Connection = True;

NIでは、SQLServer用のMicrosoftOLEDBプロバイダを使用することをお勧めします。エラーを回避するために、データベースに接続するときに、上記の代わりに次の接続文字列を使用できます。
Provider = MSOLEDBSQL ; Server = ServerName; Database = DatabaseName; Trusted_Connection = yes;

 

追加情報

文字列の長さが8000文字以下の場合に確認されるように、LabVIEWで作成されたSQLクエリに欠落しているパラメータがない場合でも、エラーメッセージにはストアドプロシージャに欠落しているパラメータが記載されています。これはクエリの切り捨てによるものであり、必ずしもパラメータが欠落しているとは限りません。

同様の状況で、ストアドプロシージャを使用する代わりに、通常のクエリで8000文字を超える文字列を挿入すると、データの切り捨てを示すエラー2147217833が発生する可能性があります。