اتصال از نوع Excel در Execute SQL Task

در کامپوننت Execute SQL Task ما انواع کانکشن های نمایش داده شده در شکل زیر را داریم:

به جز SQLMOBILE کانکشنها اتصالات معمول هستند اما شاید اتصال به پروایدری از نوع Excel برای این کامپوننت که در بخش control flow هست و نه data flow کمی گیج کننده باشد، چون اینجا قرار نیست با منابع سروکار داشته باشیم.

مثالی را باهم جلو می بریم. میخواهیم SSIS یک sheet از یک فایل اکسل را بخواند و تعداد رکوردهای آن را شمرده و آنها را تحت یک پیام توسط Script Task نمایش دهد.

ابتدا یک Execute SQL Task آورده و کانکشن آنرا از نوع Excel انتخاب و سپس به تنظیمات آن می پردازیم. (شما بر حسب ورژن اکسل خود بخش Excel Version را انتخاب کنید)

اگر در فایل اکسل خود هدر دارید تیک First row has column names را بزنید. خب حالا کانکشن ایجاد گردید. در SQlStatement کوئری زیر را بنویسید:

SELECT * FROM [100_CC_Records$]

توجه: باید نام sheet را داخل [] و به دنبال آن $ بنویسیم. در غیر این صورت خطای زیر را نشان می‌دهد.

[Execute SQL Task] Error: Executing the query “SELECT * FROM [100_CC_Records]” failed with the following error: “The Microsoft Jet database engine could not find the object ‘100_CC_Records’.  Make sure the object exists and that you spell its name and the path name correctly.”. Possible failure reasons: Problems with the query, “ResultSet” property not set correctly, parameters not set correctly, or connection not established correctly.

یک نکته دیگر اینکه وقتی از اکسل در آفیس 64 بیتی استفاده می‌کنیم و Visual Studio شما قبل از ورژن 2022 است، باید ویژگی پروژه Run64bitRunTime را در بخش Debugging پروژه را false تنظیم کنیم. به این منظور روی پروژه کلیک راست و properties را بزنید و پس از آ«ن از منوی سمت راست Debugging را انتخاب و بعد از سمت چپ مقدار Run64bitRunTime را false تنظیم کنید.

یک متغیر از نوع object ایجاد میکنیم تا بتوانیم محتویات اکسل را یکجا درون آن بریزیم.

به Execute SQL Task برگشته و مقدار Result Set آنرا Full Result Set تنظیم کنید و بعد به تب Result Set رفته و نتیجه خروجی را درون متغیر بریزید.

یک Script Task آورده و Execute SQl Task را به آن متصل کنید. داخل ادیتور script task رفته و متغیرتان را به آن معرفی کنید:

دگمه edit script را زده و اسکریپت زیر را در متد اصلی آن بنویسید:

public void Main()

              {

            // TODO: Add your code here

            //Object A = Dts.Variables[“User::Result_Set1”].Value;

            DataTable dt = new DataTable();

            OleDbDataAdapter adapter = new OleDbDataAdapter();

            adapter.Fill(dt, Dts.Variables[“User::Result_Set2”].Value);

            MessageBox.Show(dt.Rows.Count.ToString());

                     Dts.TaskResult = (int)ScriptResults.Success;

              }

آنرا save کرده و از ادیتور خارج می شویم. حال پکیج ما آماده اجرا است.

برچسب ها: بدون برچسب

نظر بگذارید

آدرس ایمیل شما منتشر نخواهد شد. قسمتهای مورد نیاز علامت گذاری شده اند *