PALMisLIFE 討論區

搜索
鹹魚爸魅力四射舞蹈教室
查看: 2329|回復: 9
打印 上一主題 下一主題

想請教一下C#的問題

[複製鏈接]

9

主題

1

好友

23

積分

該用戶從未簽到

文章
40
跳轉到指定樓層
1#
發表於 2011-5-30 18:49 |只看該作者 |倒序瀏覽
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using MySql.Data;
using MySql.Data.MySqlClient;

    namespace mysql
    {
        class Program
        {
            static void Main(string[] args)
            {
                Insert();
            }
            
//
        public int Insert(string Ohm, string Ampere, string volt)
        {
            //設定連線資訊  
            string connStr = String.Format("server=localhost;user id=root; password=123; database=test");

            MySqlConnection conn = new MySqlConnection(connStr);
            //sql字串  
            string sqlStr = "INSERT INTO tbl_SRBack (Ohm,Ampere,volt) VALUES (?Ohm,?Ampere,?volt)";

            try
            {
                conn.Open();
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                switch (ex.Number)
                {
                    case 0:
                        Console.WriteLine("Can't Connect to test.");
                        break;
                    case 1045:
                        Console.WriteLine("Account or Password wrong.");
                        break;
                }
                return ex.Number;
            }

            MySqlCommand mySqlCmd = new MySqlCommand(sqlStr, conn);
            //加入參數  
            MySqlParameter[] parameters = new MySqlParameter[3];

            parameters[0] = new MySqlParameter("?Ohm", MySqlDbType.VarChar, 99);
            parameters[0].Value = Ohm;

            parameters[1] = new MySqlParameter("?Ampere", MySqlDbType.VarChar, 99);
            parameters[1].Value = Ampere;

            parameters[2] = new MySqlParameter("?volt", MySqlDbType.VarChar, 99);
            parameters[2].Value = volt;

            mySqlCmd.Parameters.AddRange(parameters);

            try
            {
                mySqlCmd.ExecuteNonQuery();
                return 0;
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                return ex.Number;
            }

            }
        }
    }

想問一下~我大致上已經設定差不多了

但是我要怎麼設定我要給的值讓他收取我寫的值讓程式接收然後傳到資料庫
分享淘帖0 分享分享0 收藏收藏0 頂0 踩0

68

主題

1

好友

416

積分

該用戶從未簽到

文章
410
2#
發表於 2011-5-30 22:38 |只看該作者
看來你真的不懂怎麼寫程式...
假設你之前寫的讀資料能用,那麼只要把insert放到讀資料的迴圈內即可...
下面這個只是示意,
  while (true)
           {               
                try
                {
                    //由rs232讀入一個byte的資料
                    data = rs232.ReadByte();

                    //將讀到的東西顯示出來
                    Console.WriteLine(data.ToString());
                    string [] tmp =data.ToString().Split("-";  //假設你讀出來的資料是用"-"做分隔
                      Insert(tmp[0],tmp[1],tmp[2]); //這邊要帶入你前面所設定的參數
                }
            
            }

不過你這個程式還有很多問題,像是現在這種寫法,資料庫每寫一筆資料就重新連線,實在不是一個好方法
建議先了解一下程式結構再寫...

點評

kc100639  恩恩...我還在學習階段....問題太多還真抱歉...  發表於 2011-6-6 17:42
實力,決定排名的順序...
回復

使用道具 舉報

9

主題

1

好友

23

積分

該用戶從未簽到

文章
40
3#
發表於 2011-5-30 22:52 |只看該作者
恩...因為我算是研究這個東西的開發者...
但是程式的架構不算很清楚
所以目前先研究個大概出來再改進吧...@@
冒昧問一個問題
我這個回圈要在放那個地方@@"
回復

使用道具 舉報

181

主題

5

好友

2509

積分

超敗家的白爛長笛手

  • TA的每日心情
    郁悶
    2013-4-6 01:41
  • 簽到天數: 4 天

    連續簽到: 1 天

    [LV.2]偶爾看看I

    文章
    2201
    4#
    發表於 2011-5-31 13:03 |只看該作者
    while (true) {} 迴圈就是你 RS232 傳資料流進來的時候囉~

    點評

    kc100639  請問是....這樣嗎??  發表於 2011-5-31 13:12
    回復

    使用道具 舉報

    9

    主題

    1

    好友

    23

    積分

    該用戶從未簽到

    文章
    40
    5#
    發表於 2011-5-31 13:10 |只看該作者
    本文章最後由 kc100639 於 2011-5-31 13:15 編輯

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MySql.Data;
    using MySql.Data.MySqlClient;
    namespace ConsoleApplication10
    {
        class Program
        {
          
            static void Main(string[] args)
            {
                string data = string.Empty;

                //開啟rs232 Port (開啟COM1,鮑率為19200,同為檢查為元為沒有,位元率為8,停止位元數為1)
                SerialPort rs232 = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);


                //超過5秒鐘(5000毫秒)沒讀到東西,則丟出一個例外(TimeoutException)
                rs232.ReadTimeout = 5000;


                //開啟(建立)連線
                rs232.Open();

                while (true)
               {               
                    try
                    {
                        //由rs232讀入一個byte的資料
                        data = rs232.ReadByte();

                        //將讀到的東西顯示出來
                        Console.WriteLine(data.ToString());
                        string [] parameters =data.ToString().Split("Ohm-Ampere-volt");  //假設你讀出來的資料是用"-"做分隔
                          Insert(parameters[0],parameters[1],parameters[2]); //這邊要帶入你前面所設定的參數
                    }
                
               
                }
                //關閉rs232
                rs232.Close();
          
            }



            //程式片段大概是這樣  
            public int Insert(string Ohm, string Ampere, string volt)
            {
                //設定連線資訊  
                string connStr = String.Format("server=localhost;user id=root; password=123; database=test");

                MySqlConnection conn = new MySqlConnection(connStr);
                //sql字串  
                string sqlStr = "INSERT INTO tbl_test (Ohm,Ampere,volt) VALUES (?Ohm,?Ampere,?volt)";

                try
                {
                    conn.Open();
                }
                catch (MySql.Data.MySqlClient.MySqlException ex)
                {
                    switch (ex.Number)
                    {
                        case 0:
                            Console.WriteLine("Can't Connect to test.");
                            break;
                        case 1045:
                            Console.WriteLine("Account or Password wrong.");
                            break;
                    }
                    return ex.Number;
                }

                MySqlCommand mySqlCmd = new MySqlCommand(sqlStr, conn);
                //加入參數  
                MySqlParameter[] parameters = new MySqlParameter[3];

                parameters[0] = new MySqlParameter("?Ohm", MySqlDbType.VarChar, 99);
                parameters[0].Value = Ohm;

                parameters[1] = new MySqlParameter("?Ampere", MySqlDbType.VarChar, 99);
                parameters[1].Value = Ampere;

                parameters[2] = new MySqlParameter("?volt", MySqlDbType.VarChar, 99);
                parameters[2].Value = volt;

                mySqlCmd.Parameters.AddRange(parameters);

                try
                {
                    mySqlCmd.ExecuteNonQuery();
                    return 0;
                }
                catch (MySql.Data.MySqlClient.MySqlException ex)
                {
                    return ex.Number;
                }

            }
        }
    }

    請問是....這樣嗎??
    回復

    使用道具 舉報

    181

    主題

    5

    好友

    2509

    積分

    超敗家的白爛長笛手

  • TA的每日心情
    郁悶
    2013-4-6 01:41
  • 簽到天數: 4 天

    連續簽到: 1 天

    [LV.2]偶爾看看I

    文章
    2201
    6#
    發表於 2011-5-31 13:49 |只看該作者
    基本上,你的程式應該已經可以動了。只需稍做修改。
    1. data = rs232.ReadByte(); 改成 data = rs232.ReadLine(); 較方便。
    2. string [] parameters =data.ToString().Split("Ohm-Ampere-volt"; 中,Split 方法是有問題的,換成 string[] parameters = data.Split('-');

    這些僅是推測,得視您的 RS232 裝置是如何傳送資料的。總之,試試吧

    ---
    程式能跑不代表沒問題。上述的程式仍有相當的改善空間

    點評

    kc100639  謝謝你的講解 我會在多努力學習  發表於 2011-6-6 17:44
    kc100639  我改完了~但是執行的時候 出現DOS 一下子他就消失了~好像只有執行一下子不能做測試  發表於 2011-5-31 16:19
    回復

    使用道具 舉報

    68

    主題

    1

    好友

    416

    積分

    該用戶從未簽到

    文章
    410
    7#
    發表於 2011-5-31 15:49 |只看該作者
    回覆 kc100639 的文章

    我那樣寫的前提是,RS232傳出來的資料格式像是 100-3-20 ,Split會用"-"做分隔,
    所以要視你收到的資料格式做調整,的確用Readline()會比較容易一點。

    點評

    kc100639  恩恩 大致上都改的差不多了 現在在處理連結MYSQL的問題  發表於 2011-6-6 17:44
    實力,決定排名的順序...
    回復

    使用道具 舉報

    9

    主題

    1

    好友

    23

    積分

    該用戶從未簽到

    文章
    40
    8#
    發表於 2011-5-31 16:20 |只看該作者
    本文章最後由 kc100639 於 2011-5-31 16:21 編輯

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MySql.Data;
    using MySql.Data.MySqlClient;
    namespace ConsoleApplication10
    {
        class Program
        {
          
            static void Main(string[] args)
            {
                string data = string.Empty;

                //開啟rs232 Port (開啟COM1,鮑率為19200,同為檢查為元為沒有,位元率為8,停止位元數為1)
                SerialPort rs232 = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);

                //開啟(建立)連線
                rs232.Open();

                while (true)
               {               
                    try
                    {
                        //由rs232讀入一個byte的資料
                        data = rs232.ReadLine();

                        //將讀到的東西顯示出來
                        Console.WriteLine(data.ToString());
                        string[] parameters = data.Split("Ohm-Ampere-volt");  //假設你讀出來的資料是用"-"做分隔
                          Insert(parameters[0],parameters[1],parameters[2]); //這邊要帶入你前面所設定的參數
                    }
                
               
                }
                //關閉rs232
                rs232.Close();
          
            }



            //程式片段大概是這樣  
            public int Insert(string Ohm, string Ampere, string volt)
            {
                //設定連線資訊  
                string connStr = String.Format("server=localhost;user id=root; password=123; database=test");

                MySqlConnection conn = new MySqlConnection(connStr);
                //sql字串  
                string sqlStr = "INSERT INTO tbl_test (Ohm,Ampere,volt) VALUES (?Ohm,?Ampere,?volt)";

                try
                {
                    conn.Open();
                }
                catch (MySql.Data.MySqlClient.MySqlException ex)
                {
                    switch (ex.Number)
                    {
                        case 0:
                            Console.WriteLine("Can't Connect to test.");
                            break;
                        case 1045:
                            Console.WriteLine("Account or Password wrong.");
                            break;
                    }
                    return ex.Number;
                }

                MySqlCommand mySqlCmd = new MySqlCommand(sqlStr, conn);
                //加入參數  
                MySqlParameter[] parameters = new MySqlParameter[3];

                parameters[0] = new MySqlParameter("?Ohm", MySqlDbType.VarChar, 99);
                parameters[0].Value = Ohm;

                parameters[1] = new MySqlParameter("?Ampere", MySqlDbType.VarChar, 99);
                parameters[1].Value = Ampere;

                parameters[2] = new MySqlParameter("?volt", MySqlDbType.VarChar, 99);
                parameters[2].Value = volt;

                mySqlCmd.Parameters.AddRange(parameters);

                try
                {
                    mySqlCmd.ExecuteNonQuery();
                    return 0;
                }
                catch (MySql.Data.MySqlClient.MySqlException ex)
                {
                    return ex.Number;
                }

            }
        }
    }

    改好的新程式碼


    回復

    使用道具 舉報

    68

    主題

    1

    好友

    416

    積分

    該用戶從未簽到

    文章
    410
    9#
    發表於 2011-6-1 11:08 |只看該作者
    看起來你還是不了解這一段
    string[] parameters = data.Split("Ohm-Ampere-volt");  //假設你讀出來的資料是用"-"做分隔


    應該要寫成 string[] parameters = data.Split("-");
    表示,你的資料(也就是data)是一群由"-"分隔的資料,例如 3-20-100 這種格式的
    用了這個方法之後資料會變成
    parameters[0]=3
    parameters[1]=20
    parameters[2]=100
    再將這三個欄位的值填入資料庫。

    點評

    kuanll  資料不都寫在資料庫內了?用MySQL的console去看吧..  發表於 2011-6-1 14:06
    kc100639  謝謝…我終於看懂了@@ 可是想在問一下~ 我執行的時候出現DOS只有一下下就不見了 那我該怎麼去看結果呢  發表於 2011-6-1 11:32
    實力,決定排名的順序...
    回復

    使用道具 舉報

    181

    主題

    5

    好友

    2509

    積分

    超敗家的白爛長笛手

  • TA的每日心情
    郁悶
    2013-4-6 01:41
  • 簽到天數: 4 天

    連續簽到: 1 天

    [LV.2]偶爾看看I

    文章
    2201
    10#
    發表於 2011-6-1 14:01 |只看該作者
    本文章最後由 小賤健 於 2011-6-1 22:01 編輯

    rs232.Close(); 下面多加 Console.ReadKey();,表示等待使用者按任意鍵回應。
    這樣就可以了

    --
    那就加在  Insert(parameters[0],parameters[1],parameters[2]); 這段的下面了。

    點評

    kc100639  DOS的執行我已經解決了 剩下連結MYSQL 好像不會傳值到MYSQL  發表於 2011-6-6 17:45
    kc100639  我有測試了~但是不行耶~還是一樣的結果  發表於 2011-6-1 21:46
    回復

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 免費註冊

    與站長聯繫| PALMisLIFE 掌上生活      下載:更快、更棒、更好玩

    GMT+8, 2024-4-19 19:17 , Processed in 0.069370 second(s), 31 queries , Gzip On.

    Powered by Discuz!

    © 2001-2012 Comsenz Inc. style by eisdl

    回頂部