RT. 我是初学者.有3个问题.1.请问如何在在C#中如何用代码调用SQL存储过程这是我的代码
public List<Employee> ConditionsSearch(Employee employee)
        {
            List<Employee> list = new List<Employee>();
            string sql = "execute usp_search '@ename','@edepartment','@eposition'";
            SqlParameter[] values = 
            {
                new SqlParameter("@ename",employee.Ename),
                new SqlParameter("@edepartment",employee.Edepartment),
                new SqlParameter("@eposition",employee.Eposition)
            };
            DataTable dt = DBHelper.GetDataTable(sql, values);            foreach (DataRow dr in dt.Rows)
            {
                Employee emp = new Employee();
                emp.Eid = Convert.ToInt32(dr[0]);
                emp.Ename = Convert.ToString(dr[1]);
                emp.Eidentitycard = Convert.ToString(dr[2]);
                emp.Ebirthday = Convert.ToString(dr[3]);
                emp.Emale = Convert.ToString(dr[4]);
                emp.Edegree = Convert.ToString(dr[5]);
                emp.Eemail = Convert.ToString(dr[6]);
                emp.Ephone = Convert.ToString(dr[7]);
                emp.Edepartment = Convert.ToString(dr[8]);
                emp.Eposition = Convert.ToString(dr[9]);
                emp.Esalarygrade = Convert.ToString(dr[10]);
                emp.Enote = Convert.ToString(dr[11]);
                emp.Eentrydate = Convert.ToString(dr[12]);                list.Add(emp);
            }
            return list;
请问我的调用存储过程的代码有错吗??? 存储过程是这样写的
if exists(select * from sysobjects where name='usp_search')
drop proc usp_search
go
create proc usp_search
 @ename varchar(50),
 @edepartment varchar(50),
 @eposition varchar(50)
 as
select * from employee where ename=@ename or edepartment=@edepartment or eposition=@eposition在SQL SERVER中调试 execute usp_search '','',''可以正确取得结果2.我上面写的方法是不是有错误??3.如果1 2都没错的话 为什么我单步调试的时候 
foreach (DataRow dr in dt.Rows)
里的dr取不到值 
导致froeach循环完全不起作用.
希望高手能帮忙解答下.谢谢

解决方案 »

  1.   

    DataRow[x].ItemArray[y],才是返回的值吧
      

  2.   

    这样写就可以了:
    using (SqlConnection conn = new SqlConnection(ConnStr))
    {
        SqlCommand cmd = new SqlCommand(spName, conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@ename",employee.Ename));
        cmd.Parameters.Add(new SqlParameter("@edepartment",employee.Edepartment));
        cmd.Parameters.Add(new SqlParameter("@eposition",employee.Eposition));
        DataTable t = new DataTable();
        conn.Open();
        t.Load(cmd.ExecuteReader());
        foreach(DataRow r in t.Rows)
        {
        ...
        }
    }
      

  3.   


    +1 spName就是那个存储过程名称,conn是连接对象
      

  4.   


    请问是不是在C#中调用存储过程是直接调用就可以了的,不需要另写SQL语句...另外我的代码是用三层来写的,我贴的那个方法应该如何改呢??
      

  5.   

    string sql = "execute usp_search '@ename','@edepartment','@eposition'";
    修改成:
    string sql = "execute usp_search @ename,@edepartment,@eposition";
    就ok了
      

  6.   


    哈哈 谢谢,成功了. 只是我想知道,为什么我在SQL SERVER中用execute usp_search '','',''来调试就可以,到C#中就不需要单引号了...还没明白...
      

  7.   

    有点糊涂.按理说 变量,确实是不需要加引号的.那为什么在SQL SERVER中就需要加引号呢?