【问题标题】:C# Inserting Data from a form into an access DatabaseC# 将表单中的数据插入访问数据库
【发布时间】:2013-10-09 14:57:13
【问题描述】:

我开始了解C#,并且在使用点击按钮时无法将文本框中的信息插入Access 数据库。

我遇到的问题是在添加过程中。代码执行Try... Catch 部分,然后返回错误提示“Microsoft Access 数据库引擎”并且没有给出任何线索。

代码如下:

namespace WindowsFormsApplication1
{
    public partial class FormNewUser : Form
    {
        public FormNewUser()
        {
            InitializeComponent();
        }

        private void BTNSave_Click(object sender, EventArgs e)
        {
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\kenny\Documents\Visual Studio 2010\Projects\Copy Cegees\Cegees\Cegees\Login.accdb";

            String Username = TEXTNewUser.Text;
            String Password = TEXTNewPass.Text;

            OleDbCommand cmd = new OleDbCommand("INSERT into Login (Username, Password) Values(@Username, @Password)");
            cmd.Connection = conn;

            conn.Open();

            if (conn.State == ConnectionState.Open)
            {
                cmd.Parameters.Add("@Username", OleDbType.VarChar).Value = Username;
                cmd.Parameters.Add("@Password", OleDbType.VarChar).Value = Password;

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

【问题讨论】:

  • 试试 MessageBox.Show(ex.Message);你可能会得到一个更容易理解的信息
  • 对于OleDbConnection OleDbCommand,您需要一些using statements。你在对密码进行加盐和哈希处理吗?
  • 使用这些伙伴使用系统;使用 System.Collections.Generic;使用 System.Data.OleDb;使用 System.ComponentModel;使用 System.Data;使用 System.Drawing;使用 System.Linq;使用 System.Text;使用 System.Windows.Forms;
  • 并将 conn.Close() 移动到 finally

标签: c# database winforms ms-access-2007


【解决方案1】:

Password 是一个reserved word。将该字段名称括起来以避免混淆数据库引擎。

INSERT into Login (Username, [Password])

【讨论】:

    【解决方案2】:

    这个答案会有所帮助,如果您正在使用 Data Bases,那么主要使用 try-catch 块语句的帮助,这将帮助和指导您你的代码。在这里,我将向您展示如何使用按钮单击事件在数据库中插入一些值。

     private void button2_Click(object sender, EventArgs e)
        {
            System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
            conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
        @"Data source= C:\Users\pir fahim shah\Documents\TravelAgency.accdb";
    
         try
           {
               conn.Open();
               String ticketno=textBox1.Text.ToString();                 
               String Purchaseprice=textBox2.Text.ToString();
               String sellprice=textBox3.Text.ToString();
               String my_querry = "INSERT INTO Table1(TicketNo,Sellprice,Purchaseprice)VALUES('"+ticketno+"','"+sellprice+"','"+Purchaseprice+"')";
    
                OleDbCommand cmd = new OleDbCommand(my_querry, conn);
                cmd.ExecuteNonQuery();
    
                MessageBox.Show("Data saved successfuly...!");
              }
             catch (Exception ex)
             {
                 MessageBox.Show("Failed due to"+ex.Message);
             }
             finally
             {
                 conn.Close();
             }
    

    【讨论】:

      【解决方案3】:

      并没有给出任何线索

      是的,不幸的是,您的代码忽略了所有这些线索。看看你的异常处理程序:

      catch (OleDbException  ex)
      {
          MessageBox.Show(ex.Source);
          conn.Close();
      }
      

      您正在检查的只是异常的来源。在这种情况下,它是“Microsoft Access 数据库引擎”。您没有检查错误消息本身、堆栈跟踪或任何内部异常,或有关异常的任何有用信息

      不要忽略异常,它包含有关出错原因和原因的信息。

      有各种日志工具(NLog、log4net 等)可以帮助您记录有关异常的有用信息。如果做不到这一点,您应该至少捕获异常消息、堆栈跟踪和任何内部异常。目前您忽略该错误,这就是您无法解决该错误的原因。

      在您的调试器中,在catch 块内放置一个断点并检查异常的详细信息。你会发现它包含了很多信息。

      【讨论】:

      【解决方案4】:
       private void Add_Click(object sender, EventArgs e) {
       OleDbConnection con = new OleDbConnection(@ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\HP\Desktop\DS Project.mdb");
       OleDbCommand cmd = con.CreateCommand();
       con.Open();
       cmd.CommandText = "Insert into DSPro (Playlist) values('" + textBox1.Text + "')";
       cmd.ExecuteNonQuery();
       MessageBox.Show("Record Submitted", "Congrats");
       con.Close();
      } 
      

      【讨论】:

      • 最好在 Stack Overflow 上添加一个解释为什么你的解决方案应该有效。
      • @Irtaza 尝试为您的代码提供解释。重点是让提出问题的人学习。
      • 虽然这段代码可以回答问题,但最好解释一下如何解决问题,并提供代码作为示例或参考。仅代码的答案可能会令人困惑且缺乏上下文。
      【解决方案5】:

      我插入数据的代码不起作用。它没有显示错误,但我的数据库中没有显示数据。

      公共部分类 Form1 : Form { OleDbConnection 连接 = 新 OleDbConnection(check.P​​roperties.Settings.Default.KitchenConnectionString); 公共表格1() { 初始化组件(); }

          private void Form1_Load(object sender, EventArgs e)
          {
              
          }
      
          private void btn_add_Click(object sender, EventArgs e)
          {
              OleDbDataAdapter items = new OleDbDataAdapter();
              connection.Open();
              OleDbCommand command = new OleDbCommand("insert into Sets(SetId, SetName,  SetPassword) values('"+txt_id.Text+ "','" + txt_setname.Text + "','" + txt_password.Text + "');", connection);
              command.CommandType = CommandType.Text;
              command.ExecuteReader();
              connection.Close();
              MessageBox.Show("Insertd!");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        相关资源
        最近更新 更多