话不多说 先谢谢http://developer.51cto.com/art/200908/142218.htm砸来的砖
经过上面这位哥哥的提点
我今天算是把存储过程弄懂了
现在贴上自己修改 逐个运行成功的代码
先是 sql server2008里的 存储过程语句
create procedure dbo.testProcedureUsers
as
select UserName from Users
create procedure dbo.testProcedureUserInfo
@UserName varchar(20)
as
select * from Users where UserName=@UserName
create procedure dbo.testProcedureCM
@NowDate datetime,
@OldDate datetime
as
select * from ChangingModel where putDate<@NowDate and putDate>@OldDate
create procedure dbo.testProcedureSelect
@Customer int
as
if @Customer=1
begin
select city from City
end
else
begin
select top(10) CompanyName from Company
end
如要对存储过程判断是否存在
请在每句前面加上
IF EXISTS (SELECT name FROM sysobjects WHERE name = '存储过程名' AND type = 'P')
DROP PROCEDURE 存储过程名
GO
后面是vs2008里c#的源码
protected void Page_Load(object sender, EventArgs e)
{
//init();
//initOne();
//initMore();
initSelect();
}
/// <summary>
/// 一个最简单的存储过程
/// </summary>
private void init()
{
List<string> list = new List<string>();
SqlDataReader reader = DBHelp.GetReader("testProcedureUsers");
while (reader.Read())
{
list.Add(reader[0].ToString());
}
reader.Close();
if (list.Count>0)
{
for (int i = 0; i < list.Count; i++)
{
DropDownList1.Items.Add(list[i]);
}
}
Response.Write(list.Count);
}
/// <summary>
/// 带一个参数的
/// </summary>
private void initOne()
{
SqlParameter[] sp = new SqlParameter[] {
new SqlParameter("@UserName","admin")
};
DataTable dt = DBHelp.GetDataSet("testProcedureUserInfo", sp);
if (dt.Rows.Count>0)
{
Response.Write(dt.Rows[0]["FullName"].ToString());
Response.Write(dt.Rows[0]["Password"].ToString());
}
else
{
Response.Write("NO!");
}
}
/// <summary>
/// 带多个参数的
/// </summary>
private void initMore()
{
SqlParameter[] sp = new SqlParameter[] {
new SqlParameter("@NowDate",DateTime.Now),
new SqlParameter("@oldDate",DateTime.Now.AddYears(-1))
};
DataTable dt = DBHelp.GetDataSet("testProcedureCM", sp);
if (dt.Rows.Count>0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
Response.Write(dt.Rows[i]["toName"].ToString());
Response.Write(dt.Rows[i]["toCompany"].ToString());
Response.Write(dt.Rows[i]["changingTitle".ToString()]);
Response.Write("</BR>");
}
}
else
{
Response.Write("NONONONONO!");
}
}
/// <summary>
/// 选择是调用存储过程中 哪个sql
/// </summary>
private void initSelect()
{
int customer = 0;
DropDownList1.Items.Clear();
SqlParameter[] sp = new SqlParameter[] {
new SqlParameter("@Customer",customer)
};
SqlDataReader reader = DBHelp.GetReader("testProcedureSelect", sp);
while (reader.Read())
{
DropDownList1.Items.Add((string)reader[0].ToString());
}
reader.Close();
}
最后 才贴上根据存储过程修改后的 基本类啊!
public static SqlDataReader GetReader(string sql, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand(sql, Connection);
SqlDataAdapter da = new SqlDataAdapter(cmd);
for (int i = 0; i < values.Length; i++)
{
da.SelectCommand.Parameters.Add(values[i]);
}
da.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlDataReader reader = cmd.ExecuteReader();
return reader;
}
public static DataTable GetDataSet(string sql, params SqlParameter[] values)
{
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand(sql, Connection);
SqlDataAdapter da = new SqlDataAdapter(cmd);
for (int i = 0; i < values.Length; i++)
{
if ((string)reader[0]!="")
{
DropDownList1.Items.Add((string)reader[0]);
}
}
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.Fill(ds);
return ds.Tables[0];
}
希望看完别 砸砖啊 呵呵 一起学习 进步 加油了!
备注:
下面关于CLR的引用自http://developer.51cto.com/art/200908/144478.htm
是因为我 在编写的时候也发现不能生成存储过程 执行完下面的语句就好了
启用CLR集成
在你开始用C#写存储过程之前,必须要启用你的SQL Server的CLR集成特性。 默认情况它是不启用的。 打开你的SQL Server Management Studio并执行如下脚本。
这里,我们执行了系统存储过程“sp_configure”,为其提供的两个参数分别为:“clr enabled”和“1”。如果要停用CLR集成的话也是执行这个存储过程,只不过第二个参数要变为“0”而已。另外,为了使新的设置产生效果,不要忘记调用“RECONFIGURE”。
-
- sp_configure 'clr enabled', 1
- GO
- RECONFIGURE
- GO