我可以从另一个类调用sql命令参数吗?

时间:2013-03-29 15:09:58

标签: c# ms-access

我有14个表,通常的sql常用命令参数,插入,更新等。初学者,像我一样,将拥有主类中的所有方法,就像这样......

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方法中使用这个方法吗?是否有任何教程或者某人可以证明这个是如何完成的?我不确定我在这里给出的描述是什么?提前致谢

3 个答案:

答案 0 :(得分: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);
    }

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

答案 1 :(得分: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
}

希望它有所帮助。

答案 2 :(得分:0)

您的TestNam类派生自Form类。您要定义的任何表单事件处理程序必须是TestNam的成员函数,但在此函数中,您可以执行所需的操作,包括将引用传递给表单的活动实例。

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