问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c#如何调用存储过程?

发布网友 发布时间:2022-06-01 20:49

我来回答

6个回答

热心网友 时间:2023-10-16 06:07

Code highlighting proced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
public static string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

/// <summary>
/// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader RunProcere(string storedProcName, IDataParameter[] parameters)
{
SqlConnection connection = new SqlConnection(connectionString);
SqlDataReader returnReader;
connection.Open();
SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
command.CommandType = CommandType.StoredProcere;
returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
return returnReader;

}

/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="tableName">DataSet结果中的表名</param>
/// <returns>DataSet</returns>
public static DataSet RunProcere(string storedProcName, IDataParameter[] parameters, string tableName)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet dataSet = new DataSet();
connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
sqlDA.Fill(dataSet, tableName);
connection.Close();
return dataSet;
}
}
public static DataSet RunProcere(string storedProcName, IDataParameter[] parameters, string tableName, int Times)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet dataSet = new DataSet();
connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
sqlDA.SelectCommand.CommandTimeout = Times;
sqlDA.Fill(dataSet, tableName);
connection.Close();
return dataSet;
}
}

/// <summary>
/// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>SqlCommand</returns>
private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = new SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcere;
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;
}
command.Parameters.Add(parameter);
}
}

return command;
}

/// <summary>
/// 执行存储过程,返回Output输出参数值
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>object</returns>
public static object RunProcere(string storedProcName, IDataParameter[] paramenters)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = BuildQueryCommand(connection, storedProcName, paramenters);
command.ExecuteNonQuery();
object obj=command.Parameters["@Output_Value"].Value; //@Output_Value和具体的存储过程参数对应
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
}

/// <summary>
/// 执行存储过程,返回影响的行数
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="rowsAffected">影响的行数</param>
/// <returns></returns>
public static int RunProcere(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
int result;
connection.Open();
SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
rowsAffected = command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
//Connection.Close();
return result;
}
}

/// <summary>
/// 创建 SqlCommand 对象实例(用来返回一个整数值)
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>SqlCommand 对象实例</returns>
private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
command.Parameters.Add(new SqlParameter("ReturnValue",
SqlDbType.Int, 4, ParameterDirection.ReturnValue,
false, 0, 0, string.Empty, DataRowVersion.Default, null));
return command;
}

热心网友 时间:2023-10-16 06:07

string connstring = @"Data Source=localhost;Initial Catalog=Northwind;uid=sa;pwd=";
SqlConnection conn = new SqlConnection(connstring);
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcere;//设置cmd的类型为存储过程
cmd.CommandText = "CustOrderHist";
cmd.Connection = conn;

SqlParameter pCustomerID = new SqlParameter();
pCustomerID.ParameterName = "@CustomerID";
pCustomerID.SqlDbType = SqlDbType.NChar;
pCustomerID.Value = "ALFKI";

cmd.Parameters.Add(pCustomerID);
CustOrderHist:存储过程名称,@CustomerID存储过程中的参数。

热心网友 时间:2023-10-16 06:08

//加上下面这2句就好了, 不过你记得using System.Data;
string sql="xxx";//存储过程名
CommandType=CommandType.StoreProce;

热心网友 时间:2023-10-16 06:08

和其他的SQL语句是一样的 SQL="CALL PROCEDURE_NAME",然后执行SQL就行了

热心网友 时间:2023-10-16 06:09

一般我们SqlCommand对像操作的就是Sql语句,这是默认的。但是如果我们指定它的操作类型CommandType为Procere 然后把Sql语句改为存储过程的名称就OK了

热心网友 时间:2023-10-16 06:10

Code
highlighting
proced
by
Actipro
CodeHighlighter
(freeware)http://www.CodeHighlighter.com/-->/数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
public
static
string
connectionString
=
System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
///
<summary>
///
执行存储过程,返回SqlDataReader
(
注意:调用该方法后,一定要对SqlDataReader进行Close
)
///
</summary>
///
<param
name="storedProcName">存储过程名</param>
///
<param
name="parameters">存储过程参数</param>
///
<returns>SqlDataReader</returns>
public
static
SqlDataReader
RunProcere(string
storedProcName,
IDataParameter[]
parameters)
{
SqlConnection
connection
=
new
SqlConnection(connectionString);
SqlDataReader
returnReader;
connection.Open();
SqlCommand
command
=
BuildQueryCommand(connection,
storedProcName,
parameters);
command.CommandType
=
CommandType.StoredProcere;
returnReader
=
command.ExecuteReader(CommandBehavior.CloseConnection);
return
returnReader;
}
///
<summary>
///
执行存储过程
///
</summary>
///
<param
name="storedProcName">存储过程名</param>
///
<param
name="parameters">存储过程参数</param>
///
<param
name="tableName">DataSet结果中的表名</param>
///
<returns>DataSet</returns>
public
static
DataSet
RunProcere(string
storedProcName,
IDataParameter[]
parameters,
string
tableName)
{
using
(SqlConnection
connection
=
new
SqlConnection(connectionString))
{
DataSet
dataSet
=
new
DataSet();
connection.Open();
SqlDataAdapter
sqlDA
=
new
SqlDataAdapter();
sqlDA.SelectCommand
=
BuildQueryCommand(connection,
storedProcName,
parameters);
sqlDA.Fill(dataSet,
tableName);
connection.Close();
return
dataSet;
}
}
public
static
DataSet
RunProcere(string
storedProcName,
IDataParameter[]
parameters,
string
tableName,
int
Times)
{
using
(SqlConnection
connection
=
new
SqlConnection(connectionString))
{
DataSet
dataSet
=
new
DataSet();
connection.Open();
SqlDataAdapter
sqlDA
=
new
SqlDataAdapter();
sqlDA.SelectCommand
=
BuildQueryCommand(connection,
storedProcName,
parameters);
sqlDA.SelectCommand.CommandTimeout
=
Times;
sqlDA.Fill(dataSet,
tableName);
connection.Close();
return
dataSet;
}
}
///
<summary>
///
构建
SqlCommand
对象(用来返回一个结果集,而不是一个整数值)
///
</summary>
///
<param
name="connection">数据库连接</param>
///
<param
name="storedProcName">存储过程名</param>
///
<param
name="parameters">存储过程参数</param>
///
<returns>SqlCommand</returns>
private
static
SqlCommand
BuildQueryCommand(SqlConnection
connection,
string
storedProcName,
IDataParameter[]
parameters)
{
SqlCommand
command
=
new
SqlCommand(storedProcName,
connection);
command.CommandType
=
CommandType.StoredProcere;
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;
}
command.Parameters.Add(parameter);
}
}
return
command;
}
///
<summary>
///
执行存储过程,返回Output输出参数值
///
</summary>
///
<param
name="storedProcName">存储过程名</param>
///
<param
name="parameters">存储过程参数</param>
///
<returns>object</returns>
public
static
object
RunProcere(string
storedProcName,
IDataParameter[]
paramenters)
{
using
(SqlConnection
connection
=
new
SqlConnection(connectionString))
{
connection.Open();
SqlCommand
command
=
BuildQueryCommand(connection,
storedProcName,
paramenters);
command.ExecuteNonQuery();
object
obj=command.Parameters["@Output_Value"].Value;
//@Output_Value和具体的存储过程参数对应
if
((Object.Equals(obj,
null))
||
(Object.Equals(obj,
System.DBNull.Value)))
{
return
null;
}
else
{
return
obj;
}
}
}
///
<summary>
///
执行存储过程,返回影响的行数
///
</summary>
///
<param
name="storedProcName">存储过程名</param>
///
<param
name="parameters">存储过程参数</param>
///
<param
name="rowsAffected">影响的行数</param>
///
<returns></returns>
public
static
int
RunProcere(string
storedProcName,
IDataParameter[]
parameters,
out
int
rowsAffected)
{
using
(SqlConnection
connection
=
new
SqlConnection(connectionString))
{
int
result;
connection.Open();
SqlCommand
command
=
BuildIntCommand(connection,
storedProcName,
parameters);
rowsAffected
=
command.ExecuteNonQuery();
result
=
(int)command.Parameters["ReturnValue"].Value;
//Connection.Close();
return
result;
}
}
///
<summary>
///
创建
SqlCommand
对象实例(用来返回一个整数值)
///
</summary>
///
<param
name="storedProcName">存储过程名</param>
///
<param
name="parameters">存储过程参数</param>
///
<returns>SqlCommand
对象实例</returns>
private
static
SqlCommand
BuildIntCommand(SqlConnection
connection,
string
storedProcName,
IDataParameter[]
parameters)
{
SqlCommand
command
=
BuildQueryCommand(connection,
storedProcName,
parameters);
command.Parameters.Add(new
SqlParameter("ReturnValue",
SqlDbType.Int,
4,
ParameterDirection.ReturnValue,
false,
0,
0,
string.Empty,
DataRowVersion.Default,
null));
return
command;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
路上捡到一只小狗,请各位大侠鉴定下什么品种。好知道她的习性、好喂养... ...请各位大侠说说他是什么品种狗狗,成年后会多大?谢谢! 麻烦各位大侠能帮我看看这狗是什么品种的狗吗?包括生活习性,血统智商... 求鉴定这是什么品种的小狗...谢谢了。前几天刚买的 各位大侠,请问下面这个小狗叫什么名字 家庭用的开关有多少种怎么用 智能开关安装和普通开关安装的区别 美国缔造者,洛克菲勒家族是如何百年不衰的? 亿万富豪,犹太人洛克菲勒:让自己变聪明的人,有3个“愚蠢” 改病句:汽车质量的好坏,也是保证行车安全的一个很重要条件。 花生木鱼干土豆淮山加起来可以煮稀饭吗 今天看见一种豆,是野生的,豆角很长,豆子是黑竭色的,长椭圆形,豆上还有花纹但不象平安豆,查了很久,不知啥 郑州雅思 珠海哪里有卖木鱼花的?? 郑州花木鱼汽车饰品有限公司怎么样? 探春代凤姐管事的过程中,做了一件什么事让众人无不愿意,无不欢喜? 老年手机可以玩吗? 我想问红米note5断触怎么办 你们的红米 note5 会出现断触问题吗 红米10x会出现的问题 红米note5断触严不严重 移动流量不限量,有效期一个月的套餐最低多少钱?一个月后能取消吗? 怎么解决红米手机断触 在单位工作了三十多年被小年青多次辱骂怎么办? 在职场受到了上司侮辱,该怎样抚平内心阴影? 遭到领导孤立排挤、言语侮辱!职场上,你是否或多或少遭遇过这些行为? 领导当众辱骂你,你会转身就走吗? 被职场上的坏上司侮辱,该怎样抚平内心阴影? 工作中如何面对侮辱你的人,甚至是当众变本加厉侮辱你的人? 在职场上被骂的最狠的话,究竟是什么呢? 消防工程师考试都什么人能考? 误喝了点稀料怎么办 那我这里怎么是个5g探索? vivo5g探索花钱吗 汽车底漆是什么成分喝了有伤害吗? 5g探索有什么用 天拿水喝了怎么办 人饮用石油后会怎样 那我这里怎么只有一个5g探索没有5g开关? 甲醛中毒怎么办吗 5g探索需要打开吗 二甲苯是致癌物吗 二甲苯毒性有多大 vivo5g探索要钱吗 iQOOZ5,5G探索如何关闭 宠物狗急救 5G手机问题全答疑,5G如何探索未来?? 冷门的日本姓氏是什么? 誰知道日本姓氏的英文? 为什么说炒股还要看电视 说女生绿巨人是什么意思