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循环完全不起作用.
希望高手能帮忙解答下.谢谢
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循环完全不起作用.
希望高手能帮忙解答下.谢谢
解决方案 »
- 有什么函数能生成指定长的空格字符串?
- (急切求助)如何获取控制台程序显示的内容?
- 困惑了我N天了还没解决!winform请问长操作时如何弹出窗口,等长操作完成后自动关闭???
- 改变DataGrid 上一列的值
- TextBpx控件可以绑定到DataView吗?
- 在c# winforn 中怎样启动outlook
- 菜鸟提问:请问c#中有没有全局变量,模块级变量这样的机制吗?
- [求助]水晶报表问题
- 哪里有真正可以安装的中文版MSDN2003下载?
- 菜鸟求助!C#能不能单独设置GridView某一个单元格里的字体和颜色
- WPF里用按钮替代ListBox中滚动条的功能,请问怎样操作呢?
- GridView中有分页 而每行数据中有checkbox 用什么保存分页的checked状态
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)
{
...
}
}
+1 spName就是那个存储过程名称,conn是连接对象
请问是不是在C#中调用存储过程是直接调用就可以了的,不需要另写SQL语句...另外我的代码是用三层来写的,我贴的那个方法应该如何改呢??
修改成:
string sql = "execute usp_search @ename,@edepartment,@eposition";
就ok了
哈哈 谢谢,成功了. 只是我想知道,为什么我在SQL SERVER中用execute usp_search '','',''来调试就可以,到C#中就不需要单引号了...还没明白...