PALMisLIFE 討論區

標題: C#與MYSQL程式碼問題 [列印本頁]

作者: kc100639    時間: 2011-6-6 16:57
標題: C#與MYSQL程式碼問題
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using MySql.Data.MySqlClient;

namespace ConsoleApplication1
{
    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.ReadLine();


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

                    //將讀到的東西顯示出來
                    Console.WriteLine(data.ToString());
                }
            

                //如果讀到'q'則停止
              
            }

            //關閉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_copy (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, 50);
            parameters[0].Value = Ohm;

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

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

            mySqlCmd.Parameters.AddRange(parameters);

            try
            {
                mySqlCmd.ExecuteNonQuery();

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





    }
}


這是我寫的程式碼

想問一下!我的程式執行出來可以跑RS232顯示的部分

但是與資料庫的連結,沒有連結到

不知道是我的程式碼出了問題嗎??還是我有東西沒加到

不知道有沒有人可以幫我看一下...
作者: kuanll    時間: 2011-6-7 12:11
你把錯誤都try catch掉了,所以看不到錯誤訊息,先把try catch拿掉貼錯誤訊息出來看看吧!
順便附上table的結構看看。
作者: 小賤健    時間: 2011-6-7 12:17
本文章最後由 小賤健 於 2011-6-7 12:17 編輯

由你的設定連線資訊裡得知,mysql 是安裝在本機,資料庫登入帳號 root,密碼 123。
這些都有跟你的系統有符合嗎?
作者: kc100639    時間: 2011-6-7 14:25
本文章最後由 kc100639 於 2011-6-7 14:26 編輯


//連接資料庫成功

        public int Insert(string Ohm, string Ampere, string volt)
        {
            String conString = "SERVER = localhost; DATABASE = test; User ID = root; PASSWORD = 123;";
            //取得MySQLConnection
            MySqlConnection conn = new MySqlConnection(conString);

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
conn.Open();


            string sqlStr = "INSERT INTO tbl_test (Ohm,Ampere,volt) VALUES (?Ohm,?Ampere,?volt)";

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

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

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

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

            mySqlCmd.Parameters.AddRange(parameters);

            try
            {
                mySqlCmd.ExecuteNonQuery();

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

目前我測試的資料庫連結有成功
但是insert資料的時候
好像沒有寫進去
資料庫沒有新增新的檔案



kc100639 於 2011-6-7 14:27 補充以下內容:




kc100639 於 2011-6-7 14:28 補充以下內容:

這是結構的圖片
作者: kuanll    時間: 2011-6-7 15:57
錯的地方是資料表名稱,在結構上看到的名稱是"test",在程式看到的卻是"tbl_test",
再來就是,結構檔明明有五個欄位,且不允許空值(NULL),但是填入資料時卻又只有三個欄位,除非你的日期與時間有給預設值,要不然這樣一定會錯。
作者: 小賤健    時間: 2011-6-7 16:07
本文章最後由 小賤健 於 2011-6-7 16:08 編輯

看到圖了,預設值的問題。
date, time 兩個資料欄是設定成 可為 null。但程式並沒有特別指定,所以會新增失敗。
你可以直接設定 date, time 兩欄的預設值為資料新增當時的時間。
可以參考這裡,並注意你所使用的版本。用法有版法差異。

這樣就不用改程式了
作者: kc100639    時間: 2011-6-7 16:30
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str;

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


            


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

            while (true)
            {
                //由鍵盤讀入一行字串
                str = Console.ReadLine();

                try
                {
                    //將讀到的字串寫出去
                    rs232.WriteLine(str);
                }
               
               

                //如果輸入的是quit則停止
               // if (str == "quit") break;
            }

            //關閉rs232
            rs232.Close();

        }
    }
}

這是我的傳輸端的程式
作者: kc100639    時間: 2011-6-9 04:10
我終於找到問題點也解決了.....

我可以insert了

剩下RS232傳的值跟資料庫結合了

結合完就可以讓資料庫接收了




歡迎光臨 PALMisLIFE 討論區 (http://f.pil.tw/) Powered by Discuz! X2.5