存储过程的调用

yyixin 2009-03-07 09:49:26

protected void DelComm_Click(object sender, CommandEventArgs e)
{
Database db = new Database();
int id = Convert.ToInt32(e.CommandArgument);
IDataParameter[] parameters = new IDataParameter[11];

parameters[0] = (IDataParameter)Activator.CreateInstance(typeof(SqlParameter), false);
parameters[0].ParameterName = "@F_ID";
parameters[0].Value = id;

db.ExecuteProcedure("yx_del", parameters);

}



//Database类摘录如下:

//类摘录如下:

/// <summary>
/// 保护方法,打开数据库连接。
/// </summary>
protected void Open()
{
if (Connection == null)
{
Connection = new SqlConnection(ConnectionString);
}
if (Connection.State.Equals(ConnectionState.Closed))
{
Connection.Open();
}
}

public void ExecuteProcedure(String storedProcName, IDataParameter[] parameters)
{
Open();
//这里不知如何写了,不需要返回任何值
ExecuteNonQuery();
}



谢谢!
...全文
150 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
M_arlboro 2009-03-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yyixin 的回复:]
C# code

public void ExecuteProcedure(String storedProcName, IDataParameter[] parameters)
{
Open();
SqlCommand cmd = new SqlCommand(storedProcName, Connection);
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter para in parameters)
cmd.Parameters.Add(para);
cmd.ExecuteNonQuery();


[/Quote]
如果你把foreach (SqlParameter para in parameters)
cmd.Parameters.Add(para);
改成cmd.Parameters.AddRange(parameters);
在把cmd.CommandType = CommandType.StoredProcedure;
改成cmd.CommandType =ct;



整个方法 public void ExecuteProcedure(String storedProcName, IDataParameter[] parameters,CommandType ct)
{
Open();
SqlCommand cmd = new SqlCommand(storedProcName, Connection);
cmd.CommandType = ct;
cmd.Parameters.AddRange(parameters);
cmd.ExecuteNonQuery();

}
是不是存储过程和SQL 都可以使用?
嘿嘿
yyixin 2009-03-07
  • 打赏
  • 举报
回复
谢谢各位,已解决


public void ExecuteProcedure(String storedProcName, IDataParameter[] parameters)
{
Open();
SqlCommand cmd = new SqlCommand(storedProcName, Connection);
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter parameter in parameters)
{
if (parameter != null)
{
// 检查未分配值的输出参数,将其分配以DBNull.Value.
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
cmd.ExecuteNonQuery();

}
liuyeede 2009-03-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yyixin 的回复:]
引用 2 楼 liuyeede 的回复:

C# code public void ExecuteProcedure(String storedProcName, IDataParameter[] parameters)
{
Open();
//这里不知如何写了,不需要返回任何值
SqlCommand cmd = new SqlCommand();
cmd.ComandText=storedProcName;
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter para in parameters)



编译器错误信息: CS0117: “System.Data.SqlClient.SqlCommand”并…
[/Quote]我是手工敲进去的,CommandText少写了一个m。
yyixin 2009-03-07
  • 打赏
  • 举报
回复


public void ExecuteProcedure(String storedProcName, IDataParameter[] parameters)
{
Open();
SqlCommand cmd = new SqlCommand(storedProcName, Connection);
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter para in parameters)
cmd.Parameters.Add(para);
cmd.ExecuteNonQuery();

}

出错:
SqlParameterCollection 仅接受非空的 SqlParameter 类型对象。

谢谢LS,当前是想将此写成类,方便调用
hnsdwhl 2009-03-07
  • 打赏
  • 举报
回复
up
che2piaopiao 2009-03-07
  • 打赏
  • 举报
回复

[.NET]ADO.NET调用存储过程

一: 执行不带返回参数(Input)的存储过程
1: 首先在数据库写个存储过程, 如创建个 addUser存储过程。
Create Proc addUser
@ID int,
@Name varchar(20),
@Sex varchar(20)
As
Insert Into Users Values( @ID, @Name,@Sex )

2:创建SqlCommand对象,并初始SqlCommand对象 如:
SqlCommand cmd = new SqlCommand( );
cmd.CommandText = "addUser"; // 制定调用哪个存储过程
cmd.CommandType = CommandType.StoredProcedure; // 制定Sql命令类型是存储过程, 默认的为Sql语句。
cmd.Connection = con; // 设定连接
3:向SqlCommand对象添加存储过程参数
SqlParameter param = new SqlParameter( ); // 定义一个参数对象
param.ParameterName = "@ID"; // 存储过程参数名称
param.Value = txtID.Text.Trim(); // 该参数的值
cmd.Parameters.Add( param ); // SqlCommand对象添加该参数对象
param = new SqlParameter( "@Name", txtName.Text.Trim() ); // 简写方式
cmd.Parameters.Add( param );
4:SqlCommand对象调用执行Sql的函数。 如:
cmd.ExecuteNonQuery();

二:执行带返回参数(Output)的存储过程
1: 首先在数据库写个存储过程, 如创建个 queryUser存储过程。
alter Proc queryUser
@ID int,
@Suc varchar(10) output
As
select @Suc = 'false'
if exists( Select * From users where u_id = @ID )
select @Suc = 'success'
2:创建SqlCommand对象,并初始SqlCommand对象 如:
SqlCommand cmd = new SqlCommand( );
cmd.CommandText = "queryUser"; // 制定调用哪个存储过程
cmd.CommandType = CommandType.StoredProcedure; // 制定Sql命令类型是存储过程, 默认的为Sql语句。
cmd.Connection = con; // 设定连接
3:向SqlCommand对象添加存储过程参数
SqlParameter param1 = new SqlParameter( "@ID", txtID.Text ); // 添加输入参数
cmd.Parameters.Add( param1 );
SqlParameter param2 = new SqlParameter(); // 添加输出参数
param2.ParameterName = "@Suc"; // 名称
param2.SqlDbType = SqlDbType.VarChar; // 输出参数的Sql类型
param2.Size = 10; // 输出参数的Sql类型大小
param2.Direction = ParameterDirection.Output; // 指定该参数对象为输出参数类型
cmd.Parameters.Add( param2 );
4:SqlCommand对象调用执行Sql的函数。 如:
cmd.ExecuteNonQuery();
MessageBox.Show( param2.Value.ToString() ); // 输出输出参数的值
输入参数的存储过程的示例:
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "addUser";

SqlParameter param = new SqlParameter( );
param.ParameterName = "@ID";
param.Value = txtID.Text.Trim();
cmd.Parameters.Add( param );
param = new SqlParameter( "@Name", txtName.Text.Trim() );
cmd.Parameters.Add( param );
param = new SqlParameter();
param.ParameterName = "@Sex";
param.Value = txtSex.Text.Trim();
cmd.Parameters.Add( param );
//da.InsertCommand = cmd;

if ( cmd.ExecuteNonQuery() == 1 )
{
MessageBox.Show( "添加成功" );
}
else
{
MessageBox.Show("失败");
}
}
catch( SqlException ex )
{
MessageBox.Show( ex.Message );
}

输出参数的存储过程的示例:
try
{
SqlCommand cmd = new SqlCommand( );
cmd.CommandText = "queryUser";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;

SqlParameter param1 = new SqlParameter( "@ID", txtID.Text );
cmd.Parameters.Add( param1 );
SqlParameter param2 = new SqlParameter();
param2.ParameterName = "@Suc";
param2.SqlDbType = SqlDbType.VarChar;
param2.Size = 10;
param2.Direction = ParameterDirection.Output;
cmd.Parameters.Add( param2 );

cmd.ExecuteNonQuery();

MessageBox.Show( param1.Value.ToString() );
MessageBox.Show( param2.Value.ToString() );
}
catch( SqlException ex )
{
MessageBox.Show( ex.Message );
}


yyixin 2009-03-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liuyeede 的回复:]

C# code public void ExecuteProcedure(String storedProcName, IDataParameter[] parameters)
{
Open();
//这里不知如何写了,不需要返回任何值
SqlCommand cmd = new SqlCommand();
cmd.ComandText=storedProcName;
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter para in parameters)

[/Quote]

编译器错误信息: CS0117: “System.Data.SqlClient.SqlCommand”并不包含“ComandText”的定义
liuyeede 2009-03-07
  • 打赏
  • 举报
回复
 public void ExecuteProcedure(String storedProcName, IDataParameter[] parameters)
{
Open();
//这里不知如何写了,不需要返回任何值
SqlCommand cmd = new SqlCommand();
cmd.ComandText=storedProcName;
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter para in parameters)
cmd.Parameters.Add(para);
cmd.ExecuteNonQuery();
}


62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧