2013-03-21 4 views
0

Я хочу, чтобы сохранить данные по кнопке от сохранения:C# и базы данных MS-Access вставив

idbox (текстовое поле) - empbox (COMBOBOX) - jobbox (COMBOBOX) - unitbox (выпадающий) -

destbox (ComboBox) - detectivebox (ComboBox) - statebox (ComboBox) -

investdate (DatePicker) - investresult (текстовое поле)

в таблица investinside же порядка:

ID - EMP - блок - работа - Dest - детективный - состояние - investdate - investresult

я попробовал этот и не было никаких ошибок, но ничего не было сохранено в таблице когда я проверяю ....

Могу ли я узнать, в чем причина?

вот код я попытался

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


namespace beta_2 
{ 
    public partial class Dentry_main : Form 
{ 
     OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=beta2.mdb;"); 
    OleDbDataAdapter da; 
    DataSet ds = new DataSet(); 
    OleDbCommand com = new OleDbCommand(); 
    string sql; 

    public Dentry_main() 
    { 
     InitializeComponent(); 
    } 

    private void Dentry_main_Load(object sender, EventArgs e) 
    { 
     // TODO: This line of code loads data into the 'beta2DataSet.stateinside' table. You can move, or remove it, as needed. 
     this.stateinsideTableAdapter.Fill(this.beta2DataSet.stateinside); 
     // TODO: This line of code loads data into the 'beta2DataSet.detectivestbl' table. You can move, or remove it, as needed. 
     this.detectivestblTableAdapter.Fill(this.beta2DataSet.detectivestbl); 
     // TODO: This line of code loads data into the 'beta2DataSet.departments' table. You can move, or remove it, as needed. 
     this.departmentsTableAdapter.Fill(this.beta2DataSet.departments); 
     // TODO: This line of code loads data into the 'beta2DataSet.units' table. You can move, or remove it, as needed. 
     this.unitsTableAdapter.Fill(this.beta2DataSet.units); 
     // TODO: This line of code loads data into the 'beta2DataSet.employees' table. You can move, or remove it, as needed. 
     this.employeesTableAdapter.Fill(this.beta2DataSet.employees); 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     conn.Open(); 
     com.Connection = conn; 
     sql = "INSERT INTO investinside([id],[emp],[job],[unit],[dest],[detective],[state],[investdate],[investresult])VALUES(@id,@emp,@job,@unit,@dest,@detective,@state,@investdate,@investresult)"; 
     com.CommandText = sql; 
     com.Parameters.Clear(); 
     com.Parameters.AddWithValue("@id", idbox.Text); 
     com.Parameters.AddWithValue("@emp", empbox.Text); 
     com.Parameters.AddWithValue("@job", jobbox.Text); 
     com.Parameters.AddWithValue("@unit", unitbox.Text); 
     com.Parameters.AddWithValue("@dest", destbox.Text); 
     com.Parameters.AddWithValue("@detective", detectivebox.Text); 
     com.Parameters.AddWithValue("@state", statebox.Text); 
     com.Parameters.AddWithValue("@investdate", investdatebox.Text); 
     com.Parameters.AddWithValue("@investresult", investresultbox.Text); 
     com.ExecuteNonQuery(); 
     MessageBox.Show("success"); 
     conn.Close(); 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 
} 

}

+0

Вы уверены, что вы не скопировать базу данных в папку проекта, когда вы создали этот проект? Visual studio сделает это по умолчанию. Проверьте копии. – Fionnuala

+0

Попробуйте проверить результат с помощью 'int result = com.ExecuteNonQuery();' –

+0

Как задаются свойства файла базы данных. Это ресурс? Установлено ли значение «Копировать, если новый»? – plast1K

ответ

-1

Похоже, мне у Вас есть локальное соединение DB. Вот как я обычно подключаюсь ... «server = USUALLY_YOYR_PC_NAME_CAPPITAL_LETTERS; database = имя_базы_данной; встроенная защита = да»

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

Совет: Оформить ORM - Entity Frame Work tutorial from MSDN Я скорее работаю с объектами, чем с операторами SQL. Также я делаю орфографические ошибки все время. SQL не простят те - в Entity Framework вы не можете испортить ...

+0

Я боюсь, что вы пропустили, что OP использует MS Access. – Fionnuala

+0

Вы правы - я пропустил tat – DMasta

0

Есть много способов сделать ADO.Net проще для вас.

Если у ваших таблиц есть основные ключи, вы должны взглянуть на функцию CommandBuilder ADO.Net.

Если так что добавление данных к вам таблицы осуществляется с помощью простого DataTable.Rows.Add и DataAdapter.Update

Если вы хотите сделать это вручную, вы можете попробовать пойти вручную весь путь. Вместо:



    "INSERT INTO investinside([id],[emp],[job],[unit],[dest],[detective],[state],[investdate],[investresult])VALUES(@id,@emp,@job,@unit,@dest,@detective,@state,@investdate,@investresult)" 

Попробуйте



    string.Format("INSERT INTO investinside([id],[emp],[job],[unit],[dest],[detective],[state],[investdate],[investresult])VALUES('{0}','{1}',....)", idbox.Text, empbox.Text,...) 

Смежные вопросы