0

我有14个表,有常用的sql常用命令参数,insert,update等。初学者和我一样,都会有主类中的所有方法,像这样...

namespace TestApp
{
 public partial class TestNamTxt : Form
 {
    private OleDbConnection myCon;

    public TestNamTxt()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      myCon = new OleDbConnection();
      myCon.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C\:... 
                                 Database2.mdb")

      myCon.Open();
      ds1 = new DataSet();
      string sql = "SELECT * FROM Table1";
      da = new System.Data.OleDb.OleDbDataAdapter(sql,myCon);
      da.Fill(ds1, "Foo");
      myCon.Close();
   };

   private void Insertbtn_Click(object sender, EventArgs e)
   {
     OleDbCommand cmd = new OleDbCommand();
     cmd.CommandType = CommandType.Text;
     cmd.CommandText = "INSERT INTO Table1 (ID, Name)";
     cmd.Parameters.AddWithValue("@ID", IDTxt.Text);
     cmd.Parameters.AddWithValue("@Name", NameTxt.Text);
     cmd.Connection=myCon;   
     myCon.Open();
     cmd.ExecuteNonQuery();
     myCon.Close();
  }
}

我可以将上面的代码放在另一个类中,并在 Insertbtn 方法中使用这个方法吗?是否有任何教程或者也许有人可以演示如何做到这一点?我不确定我在这里给出的描述中叫什么?提前致谢

4

3 回答 3

2

你当然可以。您可以将 GetConnection 和 Insert 放入单独的类中(甚至留在 Form 中,但我不推荐这样做)并按如下方式使用它们:

    public static OleDbConnection GetConnection()
    {
        var myCon = new OleDbConnection();
        myCon.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C\:... Database2.mdb";

        return myCon;
    }
    public static void Insert(string id, string name)
    {
        var con = GetConnection();
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "INSERT INTO Table1 (ID, Name)";
        cmd.Parameters.AddWithValue("@ID", id);
        cmd.Parameters.AddWithValue("@Name", name);
        cmd.Connection = con;
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }

    private void Insertbtn_Click(object sender, EventArgs e)
    {
        Insert(IDTxt.Text, NameTxt.Text);
    }

如果需要,您还可以将表名称指定为方法参数。

于 2013-03-29T15:14:54.570 回答
1

如果我正确理解了您的问题,
那么您可以这样做。基本上你正在尝试使用 DAL(数据访问层)这个术语,

很简单,将上面的代码放到另一个类中,然后在这个类中创建该类的一个对象并使用它。

public class DataClass
{
  public static bool AddEmp(string id, string name)
   {
     bool result;
     OleDbCommand cmd = new OleDbCommand();
     cmd.CommandType = CommandType.Text;
     cmd.CommandText = "INSERT INTO Table1 (ID, Name)";
     cmd.Parameters.AddWithValue("@ID", id);
     cmd.Parameters.AddWithValue("@name", name);
     cmd.Connection=myCon;   

     try
      {
        myCon.Open();
        cmd.ExecuteNonQuery();
        result = true;
      }
     catch
      {
         result = false;
      }

  myCon.Close();
  return result;  
}

然后在插入功能中这样做

private void Insertbtn_Click(object sender, EventArgs e)
 {
    DataClass ob = new DataClass();
    bool returnResult = ob.AddEmp(IDtxt.txt, NameTxt.text)
    if(bool) // if result == true
     //dosomething
    else
    // do something
}

希望能帮助到你。

于 2013-03-29T15:16:07.030 回答
0

您的 TestNam 类派生自 Form 类。您要定义的任何表单事件处理程序都必须是 TestNam 的成员函数,但在此函数中您可以做任何您想做的事情,包括传递对表单活动实例的引用。

如果您的函数特定于表单类,请将它们放在类中,如果它们是共享的,您可以将 htem 放在另一个对象中。

于 2013-03-29T15:20:41.000 回答