🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #21753

Re: jak to sie robi w C# ?

#21753
From: Selvin
Date: Mon, 20 Sep 2010 16:04
79 lines
3933 bytes
jeszcze inne wywolanie:

        private void button1_Click(object sender, EventArgs e)
        {
            var csb = new SqlConnectionStringBuilder();
            csb.IntegratedSecurity = true;
            csb.DataSource = "BAZA2005";
            using (var con = new SqlConnection(csb.ConnectionString))
            {
                con.Open();
                var cmd = new SqlCommand("SELECT 2 iIle, 2.55 dNorma,
120.57 dCena, 0.2 dWsp, '_.iIle * _.dNorma * _.dCena * (1 + _.dWsp) *
100' sFormula", con);
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        dynamic param = new DynamicDataRow(reader);
                        //dynamic param = new ExpandoObject();
                        //param.iIle = 2;
                        //param.dNorma = 2.55M;
                        //param.dCena = 120.57M;
                        //param.dWsp = 0.2M;
                        try
                        {
                            //
MessageBox.Show(ScriptingInterface.ScriptProvider.RunScript(textBox1.Text,
param).ToString());
 
MessageBox.Show(ScriptingInterface.ScriptProvider.RunScript(param.sFormula,
param).ToString());
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                }
            }
        }

a tak np zamieniamy sobie IDataRecord na dynamic

    public class DynamicDataRow : DynamicObject
    {
        Dictionary<string, object> record_ = new Dictionary<string,
object>();
        public DynamicDataRow(IDataRecord record)
        {
            for (int i = 0; i < record.FieldCount; i++)
                record_[record.GetName(i)] = record[i];
        }
        public override bool TryGetMember(GetMemberBinder binder, out
object result)
        {
            return record_.TryGetValue(binder.Name, out result);
        }
        public override bool TrySetMember(SetMemberBinder binder,
object value)
        {
            record_[binder.Name] = value;
            return true;
        }
    }



mozna jeszcze dodac cachowanie skryptu

        static Dictionary<string, IScriptType> scriptcache = new
Dictionary<string, IScriptType>();

        public static dynamic RunScript(string code, dynamic param)
        {
            if (!scriptcache.ContainsKey(code))
                scriptcache[code] = new
ScriptingInterface.ScriptProvider(code).Script;
            return scriptcache[code].RunScript(param);
        }
Technical Details
Message-ID: <679459a9-2df4-4fe8-b574-72f0024da8f8@g10g2000vbc.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!goblin2!goblin1!goblin.stu.neva.ru!postnews.google.com!g10g2000vbc.googlegroups.com!not-for-mail
References: <4c9721da$0$27026$65785112@news.neostrada.pl> <29a54593-9d92-4968-ba75-062ef28bbe4f@m1g2000vbh.googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!goblin2!goblin1!goblin.stu.neva.ru!postnews.google.com!g10g2000vbc.googlegroups.com!not-for-mail
From: Selvin <przemek.sulikowski@gmail.com>
Newsgroups: alt.pl.comp.lang.csharp
Subject: Re: jak to sie robi w C# ?
Date: Mon, 20 Sep 2010 09:04:51 -0700 (PDT)
Organization: http://groups.google.com
Lines: 81
Message-ID: <679459a9-2df4-4fe8-b574-72f0024da8f8@g10g2000vbc.googlegroups.com>
References: <4c9721da$0$27026$65785112@news.neostrada.pl> <29a54593-9d92-4968-ba75-062ef28bbe4f@m1g2000vbh.googlegroups.com>
NNTP-Posting-Host: 217.97.163.91
Mime-Version: 1.0
X-Trace: posting.google.com 1284998693 20187 127.0.0.1 (20 Sep 2010 16:04:53 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Mon, 20 Sep 2010 16:04:53 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: g10g2000vbc.googlegroups.com; posting-host=217.97.163.91; posting-account=R8EpSwoAAADeCYcG96LM5BAc_tdIdesQ
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3,gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit