使用C#将数据插入到数据库中

时间:2016-11-25 14:50:21

标签: c# ms-access

对于我正在制作的节目,我想在表格中添加国家代码,城市的邮政编码和城市名称。如果表中已有此信息,则无需进行任何操作。

但是,新记录不会插入我的表格中。

例如:我桌上只有'BE,'3580','Beringen'。我开始我的计划。 首先,我插入已经在我的表中的值,没有任何事情发生。

其次我尝试添加一个新值(例如:('BE''3500','Hasselt'))。我收到消息框:“数据成功添加!”。

之后,我尝试添加与之前相同的值('BE''3500','Hasselt')。我的程序什么也没做。

但是当我打开Access时,要看一下表格。没有添加新数据。

我做错了什么?

 connection.ConnectionString = @"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = DeJongDatabase.mdb; Persist Security Info = True";

这是我的其余代码

    static class Zipcodes
{
    public static void checkAndSavePostCode(String country, String zipcode, string city)
    {
        Globals.connection.Open();
        OleDbCommand command = new OleDbCommand();
        command.Connection = Globals.connection;
        command.CommandText = string.Format("SELECT * FROM Zipcodes WHERE CountryCode = @countryCode AND City= @city AND Zipcode= @zipcode");
        command.Parameters.AddWithValue("@countyCode", country);
        command.Parameters.AddWithValue("@city", city);
        command.Parameters.AddWithValue("@zipcode", zipcode);
        OleDbDataReader postcodeReader = command.ExecuteReader();
        bool exists = false;

        while (postcodeReader.Read())
        {
            exists = true;
        }
        postcodeReader.Close();
        command.Dispose();
        Globals.connection.Close();

        OleDbCommand writeCommand = new OleDbCommand();
        writeCommand.Connection = Globals.connection;

        try
        {
            Globals.connection.Open();
            if (!exists)
            {
                if (Globals.connection.State == System.Data.ConnectionState.Open)
                {
                    /*writeCommand.CommandText = "INSERT INTO Zipcodes(CountryCode, ZipCode, City) VALUES(@countryCode, @zipcode, @city)";
                    writeCommand.Parameters.AddWithValue("@countyCode", country);
                    writeCommand.Parameters.AddWithValue("@city", city);
                    writeCommand.Parameters.AddWithValue("@zipcode", zipcode); */

                    writeCommand.CommandText = "INSERT INTO Zipcodes(CountryCode, ZipCode, City) VALUES(?, ?, ?)";
                    writeCommand.Parameters.Add(new OleDbParameter("@countryCode", OleDbType.VarChar)).Value = country;
                    writeCommand.Parameters.Add(new OleDbParameter("@zipcode", OleDbType.VarChar)).Value = zipcode;
                    writeCommand.Parameters.Add(new OleDbParameter("@city", OleDbType.VarChar)).Value = city;

                    if (writeCommand.ExecuteNonQuery() > 0)
                    {
                        MessageBox.Show("Data saved successfuly...!");
                    }
                }
                else
                {
                    MessageBox.Show("FAILED");
                }
            }
        }
        catch(OleDbException ex)
        {
            MessageBox.Show(ex.Source);
            MessageBox.Show(ex.ToString());
        }
        finally
        {
            Globals.connection.Close();
        }

1 个答案:

答案 0 :(得分:0)

这对我来说很好。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

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

        private void button1_Click(object sender, EventArgs e)
        {

            OleDbConnection conn;
            conn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\Users\your_path_here\Northwind.mdb");

            conn.Open();

            OleDbCommand cmd = conn.CreateCommand();

            cmd.CommandText = @"INSERT INTO MyExcelTable([Fname], [Lname],  [Address])VALUES('" + textBox1.Text + "', '" + textBox2.Text + "','" + textBox3.Text + "')";
            cmd.ExecuteNonQuery();
            conn.Close();

        }

        public OleDbConnection myCon { get; set; }

        private void button2_Click(object sender, EventArgs e)
        {

            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Ryan\Desktop\Coding\Microsoft Access\Northwind.mdb";

            string fstName  = textBox1.Text.Trim();
            string lstName  = textBox2.Text.Trim();
            string adres = textBox3.Text.Trim();
            OleDbCommand cmd = new OleDbCommand(@"INSERT INTO MyExcelTable (FName, LName, Address) VALUES (@FName, @LName, @Address)")
            {
                Connection = conn
            };

            conn.Open();

            if (conn.State == ConnectionState.Open)
            {
                // you should always use parameterized queries to avoid SQL Injection
                cmd.Parameters.Add("@FName", OleDbType.VarChar).Value = fstName;
                cmd.Parameters.Add("@LName", OleDbType.VarChar).Value = lstName;
                cmd.Parameters.Add("@Address", OleDbType.VarChar).Value = adres;

                try
                {
                    cmd.ExecuteNonQuery();
                    MessageBox.Show(@"Data Added");
                    conn.Close();
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Source + "\n" + ex.Message);
                    conn.Close();
                }
            }
            else
            {
                MessageBox.Show(@"Connection Failed");
            }
        }
        }
    }