簡體   English   中英

C#如何使用C#將數據插入mysql?

[英]C# how to insert data to mysql using C#?

我在C#上很新

我只創建1個可以將數據插入Mysql數據庫的表單。 我的代碼沒有錯誤,但是數據無法進入數據庫。 我很混亂。

這是我的代碼Koneksi.cs

using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Drawing;
using System.Windows.Forms;



namespace timbangan
{
    public class Koneksi
    {
        public MySqlConnection konek;

        //string konfigKoneksi = "server=localhost; database=timbangan; uid=root; pwd=";
        string konfigKoneksi = "Server=localhost;Database=timbangan;Uid=root;Pwd=";

        public void bukaKoneksi()
        {
            konek = new MySqlConnection(konfigKoneksi);
            konek.Open();

            var temp = konek.State.ToString();

            if (temp == "Open")
            {

                MessageBox.Show(@"Connection working.");

            }
            else {

                MessageBox.Show(@"Please check connection string");



            }
        }
        public void tutupKoneksi()
        {
            konek = new MySqlConnection(konfigKoneksi);
            konek.Close();
        }


    }//end of koneksi
}//end namespace

Isidata.cs文件

using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Windows.Forms;

namespace timbangan
{
    public class Isidata
    {
        MySqlDataAdapter adapter;
        MySqlCommand komand;
        Koneksi classKoneksi;
        DataTable tabel;
        string sql = "";

        public DataTable tambahData(string berat_filter, string qty, string nama_barang, string dari, string shift)
        {
            classKoneksi = new Koneksi();

            sql = "insert into tb_timbang(BERAT_FILTER,QTY,NAMA_BARANG,DARI,SHIFT) values (" + berat_filter + ",'" + qty + "','" + nama_barang + "','" + dari + "','" + shift + "')";
            //MessageBox.Show(sql);
            tabel = new DataTable();


            try
            {
                classKoneksi.bukaKoneksi();
                komand = new MySqlCommand(sql);
                adapter = new MySqlDataAdapter(sql, classKoneksi.konek);
                adapter.Fill(tabel);
            }

            catch (Exception)
            {
                MessageBox.Show("error");
            }
            return tabel;
        }


    }//end of issdata
}//end of timbangan

Form1.cs文件

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

namespace timbangan
{
    public partial class Form1 : Form
    {
        public DataTable tabel;
        public string status = "";
        public string berat_filter, qty, nama_barang, dari, shift;


        public Form1()
        {
            InitializeComponent();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Isidata isi = new Isidata();
            tabel = isi.tambahData(tbBerat.Text, tbQty.Text, tbNama.Text, tbDari.Text, tbShift.Text);
            MessageBox.Show("Berhasil");

        }


    }
}

有人可以幫我解決這個問題嗎? 還是建議我有更多短代碼來插入數據?

提前致謝

您可以將您的班級重新設計成這樣

namespace timbangan
{
    public static class Koneksi
    {
        public static MySqlConnection konek;

        private static string konfigKoneksi = "Server=localhost;Database=timbangan;Uid=root;Pwd=";

        public static MySqlConnection GetConnection()
        {
            konek = new MySqlConnection(konfigKoneksi);
            konek.Open();
        }
    }//end of koneksi

    public class Isidata
    {
        public int InsertData(string berat_filter, string qty, string nama_barang, string dari, string shift)
        {
             sql = @"insert into tb_timbang
             (BERAT_FILTER,QTY,NAMA_BARANG,DARI,SHIFT) 
             values (@berat_filter,@qty,@nama_barang,@dari,@shift)";
             try
             {
                 using(MySqlConnection cnn = Koneksi.GetConnection())
                 using(MySqlCommand cmd = new MySqlCommand(sql, cnn))
                 {
                     cmd.Parameters.Add("@berat_filter", MySqlDbType.VarChar).Value = berat_filter;
                     cmd.Parameters.Add("@qty", MySqlDbType.VarChar).Value = qty;
                     cmd.Parameters.Add("@name_barang", MySqlDbType.VarChar).Value = nama_barang;
                     cmd.Parameters.Add("@dari", MySqlDbType.VarChar).Value = dari;
                     cmd.Parameters.Add("@shift", MySqlDbType.VarChar).Value = shift;
                     return cmd.ExecuteNonQuery();

                 }
                 catch (Exception ex)
                 {
                     MessageBox.Show("error " + ex.Message);
                     return -1;
                 }
             }
         }
     }//end of issdata
}//end of timbangan

在這種設計中,周圍沒有更多的全局變量。 可以完全刪除相同的Koneski類,並且可以在現場創建MySqlConnection(從配置文件等外部源讀取連接Koneski )。 不要認為這比保持已創建並始終打開的全局連接對象的效率低。 有一個ADO.NET 連接池基礎結構(鏈接用於Sql Server,但對於MySql是相同的),可以非常有效地運行以處理您的連接

重要的是Using語句 (在不再需要釋放寶貴的資源時關閉並釋放命令和連接),以及用於填充發送給服務器的命令的參數。 如果您需要在工作的其他方面使用適配器,則可以在Isidata類中添加其他類似方法

最后,請注意,所有參數均為字符串類型。 這可能有效,但是最好在數據庫上具有與字段類型相同類型的參數(當然,變量應具有正確的數據類型)。 這對於日期時間字段尤為重要,當將日期時間字段視為字符串時,可能會讓人頭疼,無法正常工作。 請參見MySqlDbType枚舉

創建一個名為DBClass.cs的類,並編寫以下代碼-

    class DBClass
        {
            MySqlCommand odcmd = new MySqlCommand();
            MySqlConnection odcon = new MySqlConnection();
            MySqlDataAdapter oda = new MySqlDataAdapter();

            public DBClass()
            {                

            }

public void OpenConnection()
        {
            odcon.ConnectionString = "Server=localhost;Database=timbangan;Uid=root;Pwd=";
                if (odcon.State == ConnectionState.Closed)
                    odcon.Open();
                oda.SelectCommand = odcmd;
                odcmd.Connection = odcon;
        }

        public void CloseConnection()
        {
            if (odcon.State == ConnectionState.Open)
                odcon.Close();
        }

            public DataTable Select(string sql)
            {
                DataTable dt = new DataTable();
                odcmd.CommandText = sql;
                oda.Fill(dt);
                return dt;
            }

            public int ModiFy(string sql)
            {
                odcmd.CommandText = sql;
                return odcmd.ExecuteNonQuery();
            }
        }

在您的表單上,現在您可以按以下方式觸發查詢:

DbclassObject.Modify(Your_Insert_Update_Delete_Query);

DataTable dt= DbclassObject.Select(Your_Select_Query);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM