2017年10月20日 星期五

C# x WebService x 移除


看了 當麻許的Web Service移除 這篇

然後覺得他遇到的狀況跟我差不多

然後自己又琢磨了一下

然後我的開發工具是VS2015、WebSite、Framework4.5

紅字是重點


///////////以下寫在.asmx裡面///////////
using System;
using System.IO;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Web.Services;
using System.Web.Script.Services;


namespace WebSite1
{
    [WebService(Namespace = "",Description ="")]
    [System.ComponentModel.ToolboxItem(false)]
    public class iWS : System.Web.Services.WebService
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public void PostGetData()
        {
            try
            {
                Stream s = System.Web.HttpContext.Current.Request.InputStream;
                byte[] b = new byte[s.Length];
                s.Read(b, 0, (int)s.Length);
                string strjson = Encoding.UTF8.GetString(b);
                JObject jObjt = JObject.Parse(strjson);
                Context.Response.Output.Write(JsonConvert.SerializeObject(jObjt, Formatting.Indented));
            }
            catch (Exception ex)
            {
                Context.Response.Output.Write(JsonConvert.SerializeObject(ex.Message, Formatting.Indented));
            }
        }
    }
}
///////////以上寫在.asmx裡面///////////



///////////以下Web.config///////////
 <system.web>
    <compilation debug="true" targetFramework="4.5"/>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
        <add name="Documentation"/>
      </protocols>
      <conformanceWarnings>
        <remove name='BasicProfile1_1'/>
      </conformanceWarnings>
    </webServices>
    <pages controlRenderingCompatibilityVersion="4.0"/>
  </system.web>
</configuration>
///////////以上Web.config///////////




參考資料 :
https://dotblogs.com.tw/junegoat/2012/09/10/c-sharp-webservice-remove-xmlns
https://stackoverflow.com/questions/12705380/remove-xml-tag-while-creating-web-service-in-asp-net
https://taskyam.israports.co.il/TaskYamWS/GeneralWebServices.asmx
https://social.msdn.microsoft.com/Forums/zh-TW/be1c812b-503e-4d35-9f0c-9f12b9aaf406/how-to-remove-xmlns-attribute-from-webservice-response?forum=asmxandxml





2017年10月8日 星期日

C# x WebService x JSON x 接收及傳值


WebService 接收這個部分找了超多資料,搞了三天才搞定

-------以下WebService的程式碼,寫在asmx裡面

using System.Web.Services;
using System.Web.Script.Services;
using System.IO;
using System.Text;
using Newtonsoft.Json.Linq;

namespace WebService
{
    [WebService(Namespace = "http://microsoft.com/webservices/")]
    public class iWS : System.Web.Services.WebService
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

        public string PostGetData()
        {
            //應用程式呼叫的網址 : "http://localhost:54756/iWS.asmx/PostGetData"

            Stream s = System.Web.HttpContext.Current.Request.InputStream;
            byte[] b = new byte[s.Length];
            s.Read(b, 0, (int)s.Length);
            string aa = Encoding.UTF8.GetString(b);
            return aa;
        }
    }
}
-------以上WebService的程式碼,寫在asmx裡面



-------以下ConsoleApplication,寫在Program.cs裡面
using System;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Net;
using System.IO;
using System.Data.SqlClient;
using System.Data;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string targetUrl = "http://localhost/iWS.asmx/PostGetData";

            string connString = "你資料庫的位置";
            byte[] postData;
            string jsonStr;
            try
            {
                string strSQL = "SELECT 'H123' as a, " + "\r\n" +
                                          "'56789' as b, " + "\r\n" +
                                          "'2' as c, ";

                SqlConnection connSQL = new SqlConnection(connString);
                connSQL.Open();
                SqlCommand comm = new SqlCommand(strSQL, connSQL);
                SqlDataReader dr = comm.ExecuteReader();
                DataTable dt = new DataTable();
                dt.Load(dr);
                dr.Close();
                comm.Dispose();
                connSQL.Close();
                int dtCount = dt.Rows.Count;

                for (int i = 0; i < dtCount; i++)
                {
                    JObject obj = new JObject(
                                                    new JProperty("a", dt.Rows[i][0].ToString()),
                                                    new JProperty("b", dt.Rows[i][1].ToString()),
                                                    new JProperty("c", dt.Rows[i][2].ToString())
                                                );

                    jsonStr = JsonConvert.SerializeObject(obj, Formatting.Indented);
                    postData = Encoding.UTF8.GetBytes(jsonStr);

                    HttpWebRequest request = HttpWebRequest.Create(targetUrl) as HttpWebRequest;
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.Timeout = 30000;
                    request.ContentLength = postData.Length;
                    // 寫入 Post Body Message 資料流
                    using (Stream st = request.GetRequestStream())
                    {
                        st.Write(postData, 0, postData.Length);
                        Console.WriteLine(jsonStr);
                    }
                    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                    {
                        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                        {
                            string result = sr.ReadToEnd();
                            Console.WriteLine(result);

                        }
                    }
                }
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
        }
    }
}
-------以上ConsoleApplication,寫在Program.cs裡面


參考資料 :
http://www.itread01.com/articles/1478475314.html
https://kknews.cc/zh-tw/other/4egm2v.html












2017年8月16日 星期三

C# x Timer x 定時執行


C# x Timer x 定時執行

Form裡面要有 :

Button *1
TextBox1 *1


/////////////////////以下 程式碼/////////////////////

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication31
{
    public partial class Form1 : Form
    {
        System.Timers.Timer testTimer;
        int intNum;
        public Form1()
        {
            InitializeComponent();
        }

        public void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            TextBox1.Text = TextBox1.Text + "\n\n" + intNum.ToString() ;
            intNum = intNum + 1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Star")
            {
                testTimer = new System.Timers.Timer(2000);//定時週期2秒
                testTimer.Elapsed += myTimer_Elapsed;//每兩秒做這件事
                testTimer.AutoReset = true; //是否不斷重複定時器操作
                testTimer.Enabled = true; //定時器啟動
                Control.CheckForIllegalCrossThreadCalls = false;
                button1.Text = "Stop";
            }
            else
            {
                testTimer.Close();
                testTimer.Dispose();
                TextBox1.Text = TextBox1.Text + "\n\n" + "Stop";
                button1.Text = "Star";
            }
        }
    }
}


/////////////////////以上 程式碼/////////////////////


執行畫面






















參考資料 : http://blog.csdn.net/kankankankan2222/article/details/8249602

2017年8月15日 星期二

C# x 判斷路經尋找 x 檔案數量 x 依副檔名找檔名


C# x 判斷路經尋找 x 檔案數量 x 依副檔名找檔名


自動列印標籤用


Form裡面要有 :

Button *1
Label *1

/////////////////////以下 程式碼/////////////////////

using System;
using System.IO;
using System.Windows.Forms;

namespace WindowsFormsApplication32
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(@"D:\test");
            DataGridView dgv = new DataGridView();
            int txtFileCount = dirInfo.GetFiles("*.txt").Length;
            if (txtFileCount != 0)
            {
                label1.Text = dirInfo.GetFiles("*.txt", SearchOption.AllDirectories)[0].ToString();
            }
        }
    }
}

/////////////////////以上 程式碼/////////////////////

執行畫面

























參考資料 : https://dotblogs.com.tw/dc690216/2009/09/17/10684
                   http://ithelp.ithome.com.tw/articles/10029065




2017年8月11日 星期五

C# x 指定檔案路徑 x 列印 x notifyIcon應用


C# x 指定檔案路徑 x 列印 x notifyIcon應用

Form裡面要有 :

Button *1
notifyicon *1
contextmenustrip *1
printdocument *1





/////////////////////以下 程式碼/////////////////////

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication30
{
    public partial class Form1 : Form
    {
        System.IO.StreamReader fileToPrint;
        System.Drawing.Font printFont;

        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            notifyIcon1.Text = "常駐程式";
        }

        private void notifyIcon1_MouseMove(object sender, MouseEventArgs e)
        {
            notifyIcon1.ShowBalloonTip(3000);
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.notifyIcon1.Visible = true;
                this.Hide();
            }
            else
            {
                this.notifyIcon1.Visible = false;
            }
        }

        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            this.Show();
            this.WindowState = FormWindowState.Normal;
        }

        private void OpenTMS_Click(object sender, EventArgs e)
        {
            this.Show();
            this.WindowState = FormWindowState.Normal;
        }

        private void ExitCMS_Click(object sender, EventArgs e)
        {
            this.Close();
            this.Dispose();
            System.GC.Collect();
            System.Environment.Exit(System.Environment.ExitCode);

        }

        private void button1_Click(object sender, EventArgs e)
        {

            fileToPrint = new System.IO.StreamReader(@"D:\test.txt");
            printFont = new System.Drawing.Font("Arial", 10);
            printDocument1.Print();
            fileToPrint.Close();
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            float yPos = 0f;
            int count = 0;
            float leftMargin = e.MarginBounds.Left;
            float topMargin = e.MarginBounds.Top;
            string line = null;
            float linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
            while (count < linesPerPage)
            {
                line = fileToPrint.ReadLine();
                if (line == null)
                {
                    break;
                }
                yPos = topMargin + count * printFont.GetHeight(e.Graphics);
                e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());
                count++;
            }
            if (line != null)
            {
                e.HasMorePages = true;
            }
        }
    }
}


/////////////////////以上 程式碼/////////////////////

執行畫面 : 
























參考資料 : https://dotblogs.com.tw/chou/archive/2009/02/25/7284.aspx
                    http://ms-net.blogspot.tw/2008/04/notifyicon-contextmenustrip.html





2017年8月2日 星期三

C# x dateTimePicker x datagridview x 儲存格結合


C# x dateTimePicker x datagridview x 儲存格結合

比原出處多了點東西 : 標題列不可以點、不會改掉其他儲存格

Form裡面要有 :

DataGridView * 1

/////////////////////以下 程式碼/////////////////////
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication33
{
    public partial class Form1 : Form
    {
        DateTimePicker oDateTimePicker = new DateTimePicker();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            List<MyData> oMyDataList = new List<MyData>();

            MyData obj1 = new MyData(1, DateTime.Now, "John");
            MyData obj2 = new MyData(2, DateTime.Now, "Sam");
            MyData obj3 = new MyData(3, DateTime.Now, "Ray");

            oMyDataList.Add(obj1);
            oMyDataList.Add(obj2);
            oMyDataList.Add(obj3);

            dataGridView1.DataSource = oMyDataList;
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 1 && e.RowIndex>=0)
            {
                dataGridView1.Controls.Add(oDateTimePicker);
                oDateTimePicker.Format = DateTimePickerFormat.Short;
                Rectangle oRectangle = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
                oDateTimePicker.Size = new Size(oRectangle.Width, oRectangle.Height);
                oDateTimePicker.Location = new Point(oRectangle.X, oRectangle.Y);
                oDateTimePicker.CloseUp += new EventHandler(oDateTimePicker_CloseUp);
                oDateTimePicker.TextChanged += new EventHandler(dateTimePicker_OnTextChange);
                oDateTimePicker.Visible = true;
            }
            else
            {
                oDateTimePicker.Visible = false;
            }
        }
        public void dateTimePicker_OnTextChange(object sender, EventArgs e)
        {
            dataGridView1.CurrentCell.Value = oDateTimePicker.Text.ToString();
        }
        public void oDateTimePicker_CloseUp(object sender, EventArgs e)
        {
            oDateTimePicker.Visible = false;
        }
    }
    class MyData
    {
        public int ID { get; set; }
        public DateTime Date { get; set; }
        public string Name { get; set; }
        public MyData(int id, DateTime dt, string name)
        {
            ID = id;
            Date = dt;
            Name = name;
        }
    }
}

/////////////////////以上 程式碼/////////////////////



執行畫面





























參考資料 : http://www.c-sharpcorner.com/UploadFile/0f68f2/embedding-calendar-datetimepicker-control-into-datagridvie586/

2017年7月27日 星期四

C# x 日期變化


//改變日期format

string startStr = start.ToString("yyyy-MM-dd HH:mm:ss");

DateTime dt = Convert.ToDateTime(startStr);//轉回DateTime

P.S format 大小寫意義不同: MM=month, mm=Minutes, HH=24hours, hh=12hours

//日期時間相加減

DateTime start = Convert.ToDateTime("2011-04-25 15:50:39");

DateTime end = Convert.ToDateTime("2011-05-02 15:50:39");

TimeSpan ts = end.subtract(start); //兩時間天數相減

double dayCount = ts.Days; //相距天數

//目前時間

DateTime dt = DateTime.Now;

//本周周一

DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d")));

//本周周日

DateTime endWeek = startWeek.AddDays(6);

//本月月初

DateTime startMonth = dt.AddDays(1 - dt.Day);

//本月月末

DateTime endMonth = startMonth.AddMonths(1).AddDays(-1);



參考資料 : http://bluemuta38.pixnet.net/blog/post/61533149-%E5%90%84%E7%A8%AE%E6%97%A5%E6%9C%9F%E6%99%82%E9%96%93%E8%A8%88%E7%AE%97

2017年7月20日 星期四

TSQL x 建立資料表的建議


重點 :
  1. ID為GUID是T1資料表的Primary Key,指定為非叢集索引
  2. a1,a2不會重複的欄位設定為叢集索引


CREATE TABLE [dbo].[T1]
(
[ID_Key] uniqueidentifier DEFAULT NEWSEQUENTIALID() NOT NULL,
[a1] [nvarchar](10)   NOT NULL,
[a2] [nvarchar](10)   NOT NULL,
[a3] [nvarchar](10)   NULL,
[a4] [datetime]          NULL,
[a5] [datetime]          NULL,
[a6] [decimal](12, 4) NULL,
[a7] [nvarchar](10)   NULL,
[a8] [nvarchar](10)   NULL,
[a9] [decimal](12, 4) NULL,
CONSTRAINT [PK_T1] PRIMARY KEY NONCLUSTERED
(
     ID_Key ASC
))
CREATE CLUSTERED INDEX CL01 ON T1(a1,a2 asc)



參考資料 :
http://blog.darkthread.net/post-2016-01-29-guid-as-pk-on-db.aspx