c调用sql存储过程
1)执行一个没有参数的存储过程的代码如下:
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcere";
da.selectCommand.CommandType = CommandType.StoredProcere;
(2)执行一个有参数的存储过程的代码如下
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcere";
da.selectCommand.CommandType = CommandType.StoredProcere;
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime(inputdate);
da.selectCommand.Parameters.Add(param);
若需要添加输出参数:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Output;
param.Value = Convert.ToDateTime(inputdate);
da.selectCommand.Parameters.Add(param);
若要获得参储过程的返回值:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.ReturnValue;
❷ 在Studio C# 2010中怎么调用SQL中的存储过程
调用sql server的存储过程 需要一定的格式,这就像学刀法,格式就是刀谱,而对程序语言的理解就是心法,编程序不能只靠刀谱,每次编程都是从例子上拷贝粘贴,也不能只靠心法,否则语法混乱。这是一点编程的理解。
1,首先,需要创建一个存储过程,例子如下
create PROCEDURE dbo.ProcessMeetRec_SingleRec
@a int,
@b int output,
@c varchar(5) output
as
if @a = 1
begin
select @c = 'a'
select @b = 9
return -1
end
if @b = 3
begin
select @c = 'b'
return -2
end
begin tran
insert book_user(logname) values('aaa')
if @@error <> 0
begin
--插入签到记录失败
raiserror ('插入签到记录失败',16,1) with seterror
rollback tran
return -9
end
return 1
注意,@b可以作为输入输出参数,@a是输入参数,@c是输出参数
2 ,定义一个调用存储过程的方法
public bool ProcessMeetRec_SingleRec(int a,ref int b,ref string c)
{
if (!CheckConn())
{
return false;
}
try
{
SqlCommand cmd = new SqlCommand("ProcessMeetRec_SingleRec", _cn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
cmd.Parameters["@a"].Value = a;
cmd.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
cmd.Parameters["@b"].Direction = ParameterDirection.InputOutput;
cmd.Parameters["@b"].Value = 6;
cmd.Parameters.Add(new SqlParameter("@c", SqlDbType.VarChar, 20));
cmd.Parameters["@c"].Direction = ParameterDirection.Output;
//存储过程返回值
cmd.Parameters.Add(new SqlParameter("@d", SqlDbType.Int));
cmd.Parameters["@d"].Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
int iRet = (int)cmd.Parameters["@d"].Value;
b = (int)cmd.Parameters["@b"].Value;
c = cmd.Parameters["@c"].Value.ToString();
//返回值-1时失败 0成功但记录无效 1成功记录有效
if (iRet == -1)
return false;
else
return true;
}
catch (Exception ex)
{
string e = ex.Message;
MessageBox.Show(ex.Message, "");
return false;
}
}
注意,其中把@b作为输入输出参数,并且一定要赋值,否则会出错。其中的参数@d并没有在存储过程中定义,它表示存储过程中return 语句返回的值。这堆程序开始要记的,对于记性差的人来说,很是郁闷,但写多了,慢慢会记住,仔细看就行,不用刻意死记硬背。
另外,当调用出错时,比如insert book_user(logname) values('aaa')这句出错的话,存储过程的 raiserror ('插入签到记录失败',16,1) with seterror 这句会发生作用,'插入签到记录失败'这句话会出现在ex.Message中。
2,在一个按钮事件中编程如下
private void btnUse_Click(object sender, EventArgs e)
{
int a =8;
int b = 0;
string c = "";
this.ProcessMeetRec_SingleRec(a, ref b, ref c);
}
注意,因为@b是输入输出参数,@c是输出参数,所以要使用ref。
❸ C# 调用sql存储过程并显示
/*
*
举一个最简单的例子
*
带一个输入参数
*
存储过程如下:
*
create
procere
proc_select
*
@name
varchar(20)
*
as
*
begin
*
select
*
from
表名
where
name
like
'%'+@name+'%'
*
end
*/
using
(sqlconnection
conn
=
new
sqlconnection("连接字符串"))
{
conn.open();
sqlcommand
cmd
=
new
sqlcommand();
cmd.connection
=
conn;
cmd.commandtext
=
"存储过程的名字";
cmd.commandtype
=
commandtype.storedprocere;
//表明你调用的sql语句是一个存储过程
sqlparameter
parm_name
=
new
sqlparameter("@name",
"名字");
//@name必须和存储过程中的参数的名字完全一样
sqldataadapter
da
=
new
sqldataadapter(cmd);
dataset
ds
=
new
dataset();
da.fill(ds);
}
❹ c#中,怎样用c#调用SQL server中的存储过程
C#中使用SQL Server分布式管理对象
我们曾经在以前的应用中多次需要得到SQL Server的详细信息,过去,我们必须使用API和效率低下的ADO的调用才能得到,现在,我们有了一个新的方法,就是SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象),尽管它目前还不被人所知和使用,但是SQLDMO提供了许多强有力的、和利用代码从SQL Server获得信息相类似的许多功能,为举例方便,这里仅向您解释如何得到本地网络的SQL Server列表,如何去连接每个SQL Server,以及如何得到Server中的表、存储过程和视图的列表。
SQLDMO对象来自SQLDMO.dll,SQLDMO.dll是随SQL Server2000一起发布的。SQLDMO.dll自身是一个COM对象,因此,在你的.NET项目里必须先引用它,VS.NET集成开发环境会创建所有必要的对COM的封装。注意:如果你使用“using SQLDMO;”语句来引用的话,你将会得到一个错误信息。要让它在你的应用程序里正常工作,你必须去引用它:
引用了COM对象之后,你就可以很容易地使用它了。
本例子中的所有操作都使用以下的一个或几个对象:
SQLDMO.Application
SQLDMO.SQLServer
SQLDMO.Database
SQLDMO.NameList
象数据备份和恢复这样的操作都有许多对象可以使用,但作为例子,我们会尽量简单,使你轻松进入SQLDMO的世界来浏览一下它的方便性。
列出本地网络中可使用的SQL服务器相对来说比较简单,首先,你需要引用SQLDMO.Application对象,其次,你必须建立一个SQLDMO.Application.ListAvailableSQLServers()方法的返回值的实例SQLDMO.NameList,SQLDMO.NameList是服务器名字的COM集合。
请记住:在你习惯了调用COM对象之前,调用COM对象总是令人感到可怕的,但习惯了就会好的。下面是一些示例代码,它利用本地可使用的SQL服务器的列表来填充下拉列表框。
//得到所有本地网络中可使用的SQL服务器列表。
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers();
for(int i=0;i<sqlServers.Count;i++)
{
object srv = sqlServers.Item(i + 1);
if(srv != null)
{
this.cboServers.Items.Add(srv);
}
}
if(this.cboServers.Items.Count > 0)
this.cboServers.SelectedIndex = 0;
else
this.cboServers.Text = "<No available SQL Servers>";
正如前面所讲的,是不是很简单?请记住:COM集合的第一个项目是1,而不是0。
连接数据库并得到所有数据库的列表也是相当简单的。下面的代码采用上面下拉列表框所选择的SQL服务器,并连接该服务器(使用文本框输入的用户名和密码),生成该服务器上数据库列表的下拉列表框。
//得到指定SQL服务器所有数据库的列表
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassword.Text);
foreach(SQLDMO.Database db in srv.Databases)
{
if(db.Name!=null)
this.cboDatabase.Items.Add(db.Name);
}
要得到该库中对象的列表也是轻而易举的事,再一次连接到数据库,就可以遍历出对象的集合。
//得到所有的存储过程,所有的表放到Tables集合,所以的视图放到Views集合
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassword.Text);
for(int i=0;i<srv.Databases.Count;i++)
{
if(srv.Databases.Item(i+1,"dbo").Name == this.cboDatabase.SelectedItem.ToString())
{
SQLDMO._Database db= srv.Databases.Item(i+1,"dbo");
this.lstObjects.Items.Clear();
for(int j=0;j<db.StoredProceres.Count;j++)
{
this.lstObjects.Items.Add(db.StoredProceres.Item(j+1,"dbo").Name);
}
break;
}
}
通过上面的例子,要得到SQL的信息是不是很方便呢
❺ 在asp.net(c#)中如何用sql语句调用服务器端的存储过程
如果已知了
服务器端
有你需要的
存储过程
,则第一步需要使你的程序和服务器先建立起连接,连接成功之后可以写一个
sql语句
:exec
存储过程名(不带参的存储过程)就行了,当然这些可以在你的程序里写也可以在你的程序里写语句用来调用完成上述sql语句的存储过程名即把上面的exec
存储过程名
封装在另一个存储过程里,在程序里通过.net
里的
sqlcommand
和
sqlconnection
类来实现完成上面所述的语句
❻ 怎么用vc调用SQL Server写的存储过程
HRESULT hr; ///设定一个句柄
_ConnectionPtr pConnection; ///一个连接指针
CString strSQLConnect = ((CManagerSys1App*)AfxGetApp())->m_strConnectMaster;
try
{
hr = pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = pConnection->Open((_bstr_t)strSQLConnect,"","",adModeUnknown); ///连接数据
_variant_t RecordsAffected;
CString strDBName = ((CManagerSys1App*)AfxGetApp())->m_strDBName;
CString strKill;
strKill.Format("exec p_killspid '%s'",strDBName); //kill all connected link
pConnection->Execute((_bstr_t)strKill,&RecordsAffected,adCmdText);
CString strBackup;
strBackup.Format("restore database %s from disk='",strDBName); //restore
strBackup += "C:\\temp.bak";
strBackup += "' with replace";
pConnection->Execute((_bstr_t)strBackup,&RecordsAffected,adCmdText);
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("全系统数据恢复失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
///关闭数据库连接
if((pConnection != NULL))
{
if(pConnection->State)
pConnection->Close();
pConnection = NULL;
}
return;
}
❼ 求大神:C语言如何执行SQL sever的存储过程
执行带参数的存储过程的方法如下:
Exec sp_configure 'allow updates',1 --允许更新系统表。
exec dbo.User_ChangeObjectOwnerBatch 'OldOwner','dbo'
以上是两个例子。
SQL Server中执行带参数的存储过程的方法是:
EXEC 存储过程名字 '参数1','参数2',数值参数
EXEC 是一个关键字。
字符串参数使用单引号括起来,数值参数不需要使用单引号
❽ c#如何调用 sql server 2005存储过程
SqlConnection
con
=
new
SqlConnection("连接字符串");
SqlCommand
cmd
=
new
SqlCommand("SelectManStudent",
con);
SqlParameter
parm
=
new
SqlParameter("@Sex",
SqlDbType.NVarChar);
parm.Value
=
'男';//此处传性别
cmd.Parameters.Add(parm);
cmd.CommandType
=
CommandType.StoredProcere;
con.Open();
SqlDataAdapter
sda
=
new
SqlDataAdapter(cmd);
DataSet
ds
=
new
DataSet();
sda.Fill(ds);
con.Close();
//ds就是查出来的
结果集