1401-11-17 00:52 اجرای فایل کوئری در سی شارپ
zahmah

 
سلام
من یک فایل query.sql در اسکیوال نوشته ام حالا میخواهم این فایل را در سی شارپ اجرا کنم.
کد من به صورت زیر است:
if (File.Exists(Application.StartupPath + "\\query.sql"))
{
string script = string.Empty;
using (FileStream s = File.Open(Application.StartupPath + "\\query.sql", FileMode.Open))
{
using (StreamReader st = new StreamReader(s))
{
script = st.ReadToEnd();
}
}

SqlConnection con_str = new SqlConnection(@"Data Source=.;Initial Catalog=myDB;User ID=user1;Password=123456");
Server server = new Server(new ServerConnection(con_str));
server.ConnectionContext.ExecuteNonQuery(script);
}

موقع Run کردن خطای زیر رو میده:
Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

از VS 2013 و SQL 2014 و تکنولوژی اتصال به دیتابیس استفاده شده نیز Entity Framework است
ممنون میشم راهنمایی بفرمائین.
1401-11-18 01:52 useLegacyV2RuntimeActivationPolicy
حاجی شریفی
مؤسس سایت
 
سلام
بعنوان اولین راه حل پیشنهاد میکنم نسخه dotNetFramework پروژه تان را از 2.0 یا 3.5 حداقل به نسخه 4.0 ارتقا دهید.

و اما بعنوان راه حل دوم ...
یک فایل app.config به پروژه تان اضافه کنید (منوی Project و سپس Add New Item)


و محتویاتی شبیه این را در آن قرار دهید:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<requiredRuntime version="v4.0.20506" />
</startup>

</configuration>


دقت کنید که پس از کامپایل برنامه و جهت تحویل به کارفرما/مشتری یا نصب در رایانه مقصد ، بخر فایل exe یک فایل exe.config هم کنار آن وجود دارد که آن هم را تحویل بدهید(کپی کنید)

در ضمن برای خواندن یکجای کل یک فایل بجای FileStream و StreamReader میتوانید از تابع آماده ReadAllText هم استفاده کنید که دقیق همان کار را انجام میدهد
تاثیری در سرعت و کیفیت ندارد و همان کد خودتان است فقط کمی ساده تر ، کوتاه تر و جمع و جورتر میشود.
string  filePath = Path.Combine(Application.StartupPath, "query.sql") ;
if (File.Exists(filePath))
{
string sql = File.ReadAllText(filePath) ;

SqlConnection con_str = new SqlConnection(@"Data Source=.;Initial Catalog=myDB;User ID=user1;Password=123456") ;
Server server = new Server(new ServerConnection(con_str)) ;
server.ConnectionContext.ExecuteNonQuery(sql) ;
}

موفق باشید
1401-11-19 17:17 روش جایگزین کار با فایل کوئری
zahmah

 
سلام ممنون از راهنمایی تون. مشکل بالا حل شد
ولی وقتی به این خط کد میرسه
server.ConnectionContext.ExecuteNonQuery(sql)
پیام خطای زیر رو نشون میده
An exception occurred while executing a Transact-SQL statement or batch

آیا می توانم این کوئری اسکیوال را در قسمت Solution Explorer اضافه کنم و از اینجا باهاش کار کنم(بخاطر بعضی تغییرات دیتابیس در نسخه های بعدی نرم افزار نیاز دارم اینجا باشه)؟
کد فراخوانی ش به چه نحو است؟
1401-11-23 01:55
حاجی شریفی
مؤسس سایت
 
سلام
خطایی که گفتید ، خیلی کلی است
یک جایی از دستور SQL تان ایراد دارد
به متن های inner exception هم دقت کنید شاید توضیح دقیق تری ارائه شده باشد
یا SQL را اینجا قراردهید تا با هم نگاه کنیم

اما سوال دوم
میتوانید هر فایلی را به Solution Explorer اضافه کنید !
اگر فایل در همان پوشه پروژه تان باشد در Solution Explorer نمایش داده میشود.
اگرهم میخواهید با هر تغییر فایل خودکار در کنار exe تان کپی شود ،کافی است در Solution Explorer انتخابش کنید و در Properties تنظیم CopyToOutputDirectory را برابر CopyAlways قرار دهید