我有两个班级Program.cs
和DataAccessLayer.cs
。
我有一个“生活”在DataAccessLayer
中的存储过程。
我想要做的是当Program.cs
运行时,我需要它将两个参数(@Department1
和@Department2
)传递给DAL中的存储过程。
在Program
中调用DAL方法后,我需要将存储过程结果存储在一个文件中。我知道我必须两次调用DAL方法(一次用于Dept1,第二次用于Dept2)。
我的问题是:如何格式化Program方法以传递Dept1的参数,然后将这些结果存储在Excel文件中?
我假设一旦我在Dept1的Program类中获得了该方法,我可以为Dept2复制并粘贴它,然后只需更改需要传递的参数(@ Department2)。
我并不担心@ StartDate / @ EndDate参数,因为每次运行存储过程都不会改变这些参数。
应该注意,我的变量(@DepartmentID)是存储过程中的静态变量。
基本上这个存储过程的目的是获取Dept1的参数,返回应用程序将放入文件的结果。
然后我再次使用Dept2参数调用有问题的方法,并返回这些结果。希望这有道理......
这就是我目前在DAL中所拥有的......
public bool GetDeptData(SqlConnection Conn, string StartDate,string EndDate, out DataTable DTDepartmentData)
{
SqlDataAdapter adapter = null;
SqlCommand cmd = null;
DateTime startDate = new DateTime();
DateTime endDate = new DateTime();
SqlDbType DepartmentID = new SqlDbType();
DTDepartmentData = new DataTable();
try
{
// Set our start date and end date for last month
startDate = DateTime.Parse(
DateTime.Now.AddMonths(-1).Year.ToString() + "-" +
DateTime.Now.AddMonths(-1).Month.ToString() + "-01 00:00:00");
endDate = DateTime.Parse(
DateTime.Now.AddMonths(-1).Year.ToString() + "-" +
DateTime.Now.AddMonths(-1).Month.ToString() + "-" +
DateTime.DaysInMonth(DateTime.Now.AddMonths(-1).Year, DateTime.Now.AddMonths(-1).Month) + " 23:59:59");
// Call our stored procedure and populate the datatable with the Dept data
adapter = new SqlDataAdapter();
cmd = new SqlCommand("sp_EXAMPLESP", Conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = startDate;
cmd.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = endDate;
cmd.Parameters.Add("@DepartmentID", SqlDbType.VarChar).Value = "departmentID";
adapter.SelectCommand = cmd;
adapter.Fill(DTDepartmentData);
return true;
}
catch (Exception CaughtError)
{
this.ErrorMsg = "An error occurred in the GetDeptData method: " + CaughtError.ToString() + " || " + Environment.NewLine;
return false;
}
答案 0 :(得分:2)
要将 departmentID 的值从main传递到DAL方法,请将GetDeptData方法的签名更改为此
public bool GetDeptData(string StartDate,string EndDate, string deptId, out DataTable DTDepartmentData)
{
// The SqlConnection should be created here and destroyed
// here, everytime you call this method
using(SqlConnection con = new SqlConnection(....connectionstring....))
{
// then use the deptId value in the creation
// of the parameter @DepartmentId
.....
cmd.Parameters.Add("@DepartmentID", SqlDbType.VarChar).Value = deptId;
adapter.Fill(DTDepartmentData);
return true;
}
}
catch(Exception ....)
{
...
}
现在在Program.cs中,你应该创建一个DAL类的实例并调用传递所需值的方法
DataTable dtResult = null;
string startDate = SomeCodeToGetTheStartDate();
string endDate = SomeCodeToGetTheEndDate();
string deptId = SomeCodeToGetTheDeptId();
MyDALClass cs = new MyDALClass();
if(cs.GetDeptData(startDate, endDate, deptId, out dtResult)
.... success ....
旁注:您确定departmentId是字符串值而不是整数吗?