我有DAL功能
public DataTable executeSelectQuery(String _query, SqlParameter[] sqlParameter)
{
SqlCommand myCommand = new SqlCommand();
DataTable dataTable = new DataTable();
dataTable = null;
DataSet ds = new DataSet();
try
{
myCommand.Connection = openConnection();
myCommand.CommandText = _query;
myCommand.Parameters.AddRange(sqlParameter);
myCommand.ExecuteNonQuery();
myAdapter.SelectCommand = myCommand;
myAdapter.Fill(ds);
dataTable = ds.Tables[0];
}
catch (SqlException e)
{
Console.Write("Error - Connection.executeSelectQuery - Query:
" + _query + " \nException: " + e.StackTrace.ToString());
return null;
}
finally
{
}
return dataTable;
}
点击我的按钮
public void save_click(object sender,EventArgs e)
{
try
{
string query = "Insert into customer_master(customer_title,customer_name)values(@parameter1,@parameter2)";
SqlParameter[] sqlparam = new SqlParameter[2];
sqlparam[0] = new SqlParameter("@parameter1", SqlDbType.VarChar, 50);
sqlparam[0].Value = ddl_title.SelectedValue;
sqlparam[1] = new SqlParameter("@parameter2", SqlDbType.VarChar, 50);
sqlparam[1].Value = txt_group_name.Text;
string id = ms.insert(query, sqlparam);
catch(Exception ex)
{
throw ex;
}
}
我希望按钮单击函数值不作为sqlparameter传递,而是作为sql命令对象传递。如何使用sqlcommand对象而不是sqlparameter执行此操作。
答案 0 :(得分:0)
为什么要传递SqlCommand
个对象?我不认为这是对当前代码的改进 - 恰恰相反!
您的UI代码实际上只应将值传递给DAL函数 - 只需List<int>
或两个字符串或其他内容。 DAL应该执行所有与数据库相关的操作,例如创建SqlCommand
和SqlParameters
所以在你的情况下,我会在你的DAL上有一个方法InsertCustomer
:
public void InsertCustomer(string customerName, string customerTitle)
{
.... // do all the DB stuff here - create SqlCommand, fill in SqlParameter,
// execute the query
}
你的UI代码应该这样调用:
MyDAL dal = new MyDAL();
dal.InsertCustomer(txt_group_name.Text, ddl_title.SelectedValue);
在UI代码层中应该有无痕迹的ADO.NET类或函数!因此,不要在UI层中创建SqlCommand
甚至SqlParameter
- 将其封装在DAL层中!这就是它的用途!