Добавление записи с использованием формы окна C # и msaccess - PullRequest
2 голосов
/ 04 мая 2011

Я создал базу данных msaccess (MyWorkers.mdb), в которой содержится одна таблица (tblWorkers)

Код:

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 WindowsFormsApplication1
{
    public partial class Insertfrm1 : Form
    {
        public OleDbConnection conn;
        public OleDbDataAdapter da;
        public DataSet ds;
        public DataTable dt;
        public OleDbCommand cmd;
        public OleDbDataReader dr;
        public int maxrecords;
        public int pointer;
        static public int cnt;
        public string wid;

        public Insertfrm1()
        {
            cnt++;
            InitializeComponent();
        }

        private void Insertfrm1_Load(object sender, EventArgs e)
        {
            conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\MyWorkers1.mdb");
            conn.Open();
            pointer = 0;
            filldata();
            navigation();

        }
        public void filldata()
        {
            da = new OleDbDataAdapter("select * from tblWorkers", conn);
            ds = new DataSet();
            da.Fill(ds);
            dt = ds.Tables[0];
            maxrecords = dt.Rows.Count;
        }
        public void navigation()
        {
            if (dt.Rows.Count == 0)
            {
                MessageBox.Show("There is no Data available");
            }
            else
            {
                txtworkersid.Text = dt.Rows[pointer].ItemArray[0].ToString();
                txtname.Text = dt.Rows[pointer].ItemArray[1].ToString();
                txtjobtitle.Text = dt.Rows[pointer].ItemArray[2].ToString();
            }
        }

        public void clrdata()
        {
            txtworkersid.Clear();
            txtname.Clear();
            txtjobtitle.Clear();
            txtworkersid.Focus();
        }

        private void btnclear_Click(object sender, EventArgs e)
        {
            txtworkersid.Clear();
            txtname.Clear();
            txtjobtitle.Clear();
            txtworkersid.Focus();
        }

        private void btnsave_Click(object sender, EventArgs e)
        {
            Boolean inc = false;
            if (txtworkersid.Text == "")
            {
                DialogResult sav = MessageBox.Show("The Worker ID is Empty", "Blank Record", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (txtname.Text == "")
            {
                DialogResult sav = MessageBox.Show("The Workers Name is Empty", "Blank Record", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (txtjobtitle.Text == "")
            {
                DialogResult sav = MessageBox.Show("The Job Title is Empty", "Balnk record", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                //string cmdstr = "SELECT Workers_ID FROM tblWorkers WHERE (Workers_ID='" + txtworkersid.Text + "')";
                //cmd = new OleDbCommand(cmdstr, conn);
                cmd=new OleDbCommand("SELECT Workers_ID FROM tblWorkers WHERE (Workers_ID='" + txtname.Text + "')",conn);
                cmd.ExecuteNonQuery();
                dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (dr.Read())
                {
                    if (txtworkersid.Text == dr.GetValue(0).ToString())
                    {
                        DialogResult sav = MessageBox.Show("The Record is Duplicate", "Duplicate Record", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        inc = true;
                        break;
                    }
                    else
                    {
                        dr.NextResult();
                    }
                }
                if (inc == false)
                {
                    string sql = "INSERT INTO tblWorkers(Workers_ID,name,job_title) VALUES ('" + txtworkersid.Text + "','" + txtname.Text + "','" + txtjobtitle.Text + "')";
                    Execute(sql);
                    DialogResult save = MessageBox.Show("Workers Record is saved Sucessfully.");
                    clrdata();
                }
            }
        }

        public void Execute(string sql)
        {
            //throw new NotImplementedException();
            cmd = new OleDbCommand(sql, conn);
            cmd.ExecuteNonQuery();
            filldata();
        }

        private void txtworkersid_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8)
            {
                e.Handled = true;
                DialogResult num = MessageBox.Show("Only Numbers are allowed", "invalid Key");
            }
        }

    }
}

При запуске отображается сообщение об ошибке типа: Тип данныхНесоответствие в выражении критериев.

в cmd.ExecuteNonQuery () оператор PLS, помогите мне

спасибо

Редактировать: полный код отправлен

Ответы [ 3 ]

0 голосов
/ 04 мая 2011

Ваша проблема со значением, которое вы передаете для сравнения Workers_ID.Сначала вы проходите через txtname.Text, а затем пытаетесь вставить txtworkersid.Text в этот столбец.

Каким он должен быть?И вы должны оставить его как строку или преобразовать его в число (и не заключать в кавычки)?

0 голосов
/ 04 мая 2011

Предполагая, что столбец Workers_ID является числовым, ваши операторы SQL должны быть:

"SELECT Workers_ID FROM tblWorkers WHERE (Workers_ID=" + txtname.Text + ")"

и

"INSERT INTO tblWorkers(Workers_ID,name,job_title) VALUES (" + txtworkersid.Text + ",'" + txtname.Text + "','" + txtjobtitle.Text + "')"

Обратите внимание на удаление кавычек ' вокруг значений идентификатора.

0 голосов
/ 04 мая 2011
 cmd = new OleDbCommand("SELECT Workers_ID FROM tblWorkers WHERE 
       (Workers_ID='" + txtname.Text + "')",conn);                 
//cmd.ExecuteNonQuery(); 

удалите это, поскольку незапросы предназначены для добавления, обновления, удаления без запроса.

и если workerId тип столбца в Db равно int,используйте удалить одинарные кавычки ' с обеих сторон.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...