VB_Net调用存储过程并得到返回值
调用存储过程的返回值、输出值
调用存储过程的返回值、输出值Pagecount = db.ExecuteNonQuery(dbCommand);只返回受影响的行,改一下db.ExecuteNonQuery(dbCommand);Pagecount = int.Parse(dbCommand.Parameters["@Pagecount"].Value.ToStrin g())动软生成的例子:c#代码:/// <summary>/// 是否存在该记录/// </summary>public bool Exists(string GoodsID,int UserID){Database db = DatabaseFactory.CreateDatabase();DbCommand dbCommand = db.GetStoredProcCommand("UP_tb_GoodsInfo_Exists");db.AddInParameter(dbCommand, "GoodsID", DbType.AnsiString,GoodsID);db.AddInParameter(dbCommand, "UserID", DbType.Int32,UserID);int result;object obj = db.ExecuteScalar(dbCommand);int.TryParse(obj.ToString(),out result);if(result==1){return true;}else{return false;}}存储过程:--------------------------------------用途:是否已经存在--项目名称:CodematicDemo--说明:--时间:2010-2-26 21:20:53------------------------------------CREATE PROCEDURE UP_tb_GoodsInfo_Exists@GoodsID varchar(50),@UserID intASDECLARE @TempID intSELECT @TempID = count(1) FROM [tb_GoodsInfo] WHERE GoodsID=@GoodsID and UserID=@UserIDIF @TempID = 0RETURN 0ELSERETURN 1GO--------------------------------------C#接收存储过程返回值:public static int User_Add(User us){int iRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommand cmd = new SqlCommand("User_Add", conn);mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UName", us.UName);cmd.Parameters.AddWithValue("@UPass", us.UPass);cmd.Parameters.AddWithValue("@PassQuestion",us.PassQuestion);cmd.Parameters.AddWithValue("@PassKey", us.PassKey);cmd.Parameters.AddWithValue("@Email", us.Email);cmd.Parameters.AddWithValue("@RName", us.RName);cmd.Parameters.AddWithValue("@Area", us.Area);cmd.Parameters.AddWithValue("@Address", us.Address);cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);cmd.Parameters.AddWithValue("@Phone", us.Phone);cmd.Parameters.AddWithValue("@QQ", us.QQ);cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;try{conn.Open();cmd.ExecuteNonQuery();iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close();}return iRet;}C#接收存储过程输出参数:public static decimal Cart_UserAmount(int UID){decimal iRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommand cmd = new SqlCommand("Cart_UserAmount", conn);mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UID", UID);cmd.Parameters.Add("@Amount",SqlDbType.Decimal).Direction=ParameterDirection.Output;try{conn.Open();cmd.ExecuteNonQuery();iRet = (decimal)cmd.Parameters["@Amount"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close();}return iRet;}本文来自CSDN博客,转载请标明出处:/wwlearn/archive/2008/05/23/2474525.aspx --------------------------------------------------------------------------------------------------我的成功的代码:输入字符串的格式不正确。
.net调用存储过程详细介绍
.net调⽤存储过程详细介绍连接字符串复制代码代码如下:string conn = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;confige⽂件复制代码代码如下:<connectionStrings><add name="NorthwindConnectionString" connectionString="Data Source=.;Initial Catalog=Northwind;Integrated Security=True" providerName="System.Data.SqlClient"/></connectionStrings>1. 只返回单⼀记录集的存储过程复制代码代码如下:SqlConnection sqlconn = new SqlConnection(conn);SqlCommand cmd = new SqlCommand();// 设置sql连接cmd.Connection = sqlconn;// 如果执⾏语句mandText = "Categoriestest1";// 指定执⾏语句为存储过程mandType = CommandType.StoredProcedure;SqlDataAdapter dp = new SqlDataAdapter(cmd);DataSet ds = new DataSet();// 填充datasetdp.Fill(ds);// 以下是显⽰效果GridView1.DataSource = ds;GridView1.DataBind();存储过程Categoriestest1复制代码代码如下:CREATE PROCEDURE Categoriestest1ASselect *from CategoriesGO2. 没有输⼊输出的存储过程c#代码部分复制代码代码如下:SqlConnection sqlconn = new SqlConnection(conn);SqlCommand cmd = new SqlCommand();cmd.Connection = sqlconn;mandText = "Categoriestest2";mandType = CommandType.StoredProcedure; sqlconn.Open();// 执⾏并显⽰影响⾏数Label1.Text = cmd.ExecuteNonQuery().ToString();sqlconn.Close();存储过程Categoriestest2复制代码代码如下:CREATE PROCEDURE Categoriestest2 ASinsert into dbo.Categories(CategoryName,[Description],[Picture])values ('test1','test1',null)GO3. 有返回值的存储过程c#代码部分复制代码代码如下:SqlConnection sqlconn = new SqlConnection(conn);SqlCommand cmd = new SqlCommand();cmd.Connection = sqlconn;mandText = "Categoriestest3";mandType = CommandType.StoredProcedure; // 创建参数IDataParameter[] parameters = {new SqlParameter("rval", SqlDbType.Int,4)};// 将参数类型设置为返回值类型parameters[0].Direction = ParameterDirection.ReturnValue; // 添加参数cmd.Parameters.Add(parameters[0]);sqlconn.Open();// 执⾏存储过程并返回影响的⾏数Label1.Text = cmd.ExecuteNonQuery().ToString();sqlconn.Close();// 显⽰影响的⾏数和返回值Label1.Text += "-" + parameters[0].Value.ToString() ;存储过程Categoriestest3复制代码代码如下:CREATE PROCEDURE Categoriestest3ASinsert into dbo.Categories(CategoryName,[Description],[Picture])values ('test1','test1',null)return @@rowcountGO4. 有输⼊参数和输出参数的存储过程c#代码部分复制代码代码如下:SqlConnection sqlconn = new SqlConnection(conn);SqlCommand cmd = new SqlCommand();cmd.Connection = sqlconn;mandText = "Categoriestest4";mandType = CommandType.StoredProcedure;// 创建参数IDataParameter[] parameters = {new SqlParameter("@Id", SqlDbType.Int,4) ,new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,};// 设置参数类型parameters[0].Direction = ParameterDirection.Output; // 设置为输出参数parameters[1].Value = "testCategoryName";// 添加参数cmd.Parameters.Add(parameters[0]);cmd.Parameters.Add(parameters[1]);sqlconn.Open();// 执⾏存储过程并返回影响的⾏数Label1.Text = cmd.ExecuteNonQuery().ToString();sqlconn.Close();// 显⽰影响的⾏数和输出参数Label1.Text += "-" + parameters[0].Value.ToString() ;存储过程Categoriestest4复制代码代码如下:CREATE PROCEDURE Categoriestest4@id int output,@CategoryName nvarchar(15)ASinsert into dbo.Categories(CategoryName,[Description],[Picture])values (@CategoryName,'test1',null)set @id = @@IDENTITYGO5. 同时具有返回值、输⼊参数、输出参数的存储过程c#代码部分复制代码代码如下:SqlConnection sqlconn = new SqlConnection(conn);SqlCommand cmd = new SqlCommand();cmd.Connection = sqlconn;mandText = "Categoriestest5";mandType = CommandType.StoredProcedure;// 创建参数IDataParameter[] parameters = {new SqlParameter("@Id", SqlDbType.Int,4) ,new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,new SqlParameter("rval", SqlDbType.Int,4)};// 设置参数类型parameters[0].Direction = ParameterDirection.Output; // 设置为输出参数 parameters[1].Value = "testCategoryName"; // 给输⼊参数赋值parameters[2].Direction = ParameterDirection.ReturnValue; // 设置为返回值 // 添加参数cmd.Parameters.Add(parameters[0]);cmd.Parameters.Add(parameters[1]);cmd.Parameters.Add(parameters[2]);sqlconn.Open();// 执⾏存储过程并返回影响的⾏数Label1.Text = cmd.ExecuteNonQuery().ToString();sqlconn.Close();// 显⽰影响的⾏数,输出参数和返回值Label1.Text += "-" + parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();存储过程Categoriestest5复制代码代码如下:CREATE PROCEDURE Categoriestest5@id int output,@CategoryName nvarchar(15)ASinsert into dbo.Categories(CategoryName,[Description],[Picture])values (@CategoryName,'test1',null)set @id = @@IDENTITYreturn @@rowcountGO6. 同时返回参数和记录集的存储过程c#代码部分复制代码代码如下:SqlConnection sqlconn = new SqlConnection(conn);SqlCommand cmd = new SqlCommand();cmd.Connection = sqlconn;mandText = "Categoriestest6";mandType = CommandType.StoredProcedure;// 创建参数IDataParameter[] parameters = {new SqlParameter("@Id", SqlDbType.Int,4) ,new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,new SqlParameter("rval", SqlDbType.Int,4) // 返回值};// 设置参数类型parameters[0].Direction = ParameterDirection.Output; // 设置为输出参数parameters[1].Value = "testCategoryName"; // 给输⼊参数赋值parameters[2].Direction = ParameterDirection.ReturnValue; // 设置为返回值// 添加参数cmd.Parameters.Add(parameters[0]);cmd.Parameters.Add(parameters[1]);cmd.Parameters.Add(parameters[2]);SqlDataAdapter dp = new SqlDataAdapter(cmd);DataSet ds = new DataSet();// 填充datasetdp.Fill(ds);// 显⽰结果集GridView1.DataSource = ds.Tables[0];GridView1.DataBind();Label1.Text = "";// 显⽰输出参数和返回值Label1.Text += parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();存储过程Categoriestest6复制代码代码如下:CREATE PROCEDURE Categoriestest6@id int output,@CategoryName nvarchar(15)ASinsert into dbo.Categories(CategoryName,[Description],[Picture])values (@CategoryName,'test1',null)set @id = @@IDENTITYselect * from Categoriesreturn @@rowcountGO7. 返回多个记录集的存储过程c#代码部分复制代码代码如下:SqlConnection sqlconn = new SqlConnection(conn);SqlCommand cmd = new SqlCommand();cmd.Connection = sqlconn;mandText = "Categoriestest7";mandType = CommandType.StoredProcedure; SqlDataAdapter dp = new SqlDataAdapter(cmd);DataSet ds = new DataSet();// 填充datasetdp.Fill(ds);// 显⽰结果集1GridView1.DataSource = ds.Tables[0];GridView1.DataBind();// 显⽰结果集2GridView2.DataSource = ds.Tables[1];GridView2.DataBind();存储过程Categoriestest7复制代码代码如下:CREATE PROCEDURE Categoriestest7ASselect * from Categoriesselect * from CategoriesGO。
vbnet线程用法 -回复
vbnet线程用法-回复线程用法介绍:一、什么是线程在计算机科学中,线程是计算机程序执行的最小单元。
它是进程中的一个实体,是CPU调度和分派的基本单位。
线程是进程中的一个实体,是可独立运行的一段程序。
与传统进程不同的是,同一个进程中可以有多个线程同时存在,并且共享进程的内存空间和其他资源。
线程有自己的程序计数器、寄存器和栈,但是没有独立的地址空间。
二、中的线程使用是一种基于.NET框架的编程语言,它提供了多种操作线程的方法和类库,方便我们在应用程序中使用多线程来进行并发处理和提高程序性能。
以下是一些中常用的线程使用方法:1. 创建线程在中,我们可以使用Thread类来创建一个新的线程。
通常情况下,我们会使用匿名函数或者委托来指定要在线程中执行的代码。
以下是一个例子:Dim t As New Thread(Sub()' 线程要执行的代码Console.WriteLine("Hello, World!")End Sub)t.Start() ' 启动线程2. 前台线程和后台线程在线程中,可以将线程设置为前台线程或者后台线程。
前台线程是指在应用程序关闭之前必须执行完毕的线程,而后台线程则是指在应用程序关闭时无论是否执行完毕都会结束的线程。
默认情况下,线程是前台线程,我们可以通过设置Thread类的IsBackground属性来将线程设置为后台线程。
例如:Dim t As New Thread(Sub()' 线程要执行的代码Console.WriteLine("Hello, World!")End Sub)t.IsBackground = True ' 将线程设置为后台线程t.Start() ' 启动线程3. 线程休眠在线程中,我们可以使用Thread类的Sleep方法来暂停当前线程的执行一段时间。
Sleep方法接受一个以毫秒为单位的时间参数,表示要休眠的时间长度。
vbnet数据库编程例子
vbnet数据库编程例子是一种用于开发Windows应用程序的编程语言,它具有强大的数据库编程能力。
下面将列举10个数据库编程的例子,以帮助读者更好地理解和掌握数据库编程的技巧。
1. 连接数据库并查询数据提供了多种连接数据库的方式,可以使用来连接各种类型的数据库,如SQL Server、MySQL等。
通过使用连接字符串,可以轻松地连接到数据库,并执行SQL查询语句来检索数据。
2. 插入数据使用可以通过执行INSERT语句将数据插入数据库表中。
可以通过构建SQL INSERT语句,并使用的Command对象来执行该语句。
3. 更新数据通过执行UPDATE语句,可以使用更新数据库表中的数据。
可以根据需要构建SQL UPDATE语句,并使用Command对象执行该语句。
4. 删除数据使用可以执行DELETE语句来删除数据库表中的数据。
可以构建SQL DELETE语句,并使用Command对象执行该语句。
5. 使用事务使用可以创建事务来确保数据库操作的原子性。
可以使用Transaction对象来开始、提交或回滚事务。
6. 使用参数化查询为了提高数据库查询的安全性和性能,可以使用参数化查询。
提供了SqlParameter类来创建参数,并将其与SQL查询语句一起使用。
7. 使用存储过程存储过程是在数据库中预定义的一组SQL语句。
使用可以调用存储过程并传递参数,以执行一系列数据库操作。
8. 使用数据适配器填充数据集数据适配器是连接数据源和数据集的桥梁。
使用可以创建数据适配器,并使用Fill方法将数据库中的数据填充到数据集中。
9. 使用数据绑定显示数据数据绑定是将数据与用户界面进行关联的一种技术。
使用可以将数据集中的数据绑定到各种控件上,以显示数据库中的数据。
10. 处理数据库异常在数据库编程中,可能会出现各种异常情况,如连接失败、查询出错等。
使用可以通过使用Try-Catch块来捕获和处理这些异常,以保证程序的健壮性。
VB.net数据库编程(06):调用存储过程(带参和不参数情况)
数据库编程(06):调用存储过程(带参和不参数情况)先建立一个无参的存储过程,为下面第一个无参调用作准备:[sql]view plaincopyprint?e Sales2.go3.create procedure sp_getGrade4.as5.select * from grade where 数学>606.go注:go是作为前面批处理的结束情况。
因为前面执行是要花时间的,如果后面执行的要依赖前面结果,没有go的话,有可能前面没有执行完,当然后面依赖此结果的语句就会执行错误。
所以go 的作用很大。
再复习的过程:一、连接数据库二、发出指令。
command默认是commandType.text。
因为是存储过程,所以应指明为commandType.StoreProcedure三、填充结果集,显示。
所以代码如下:[vb]view plaincopyprint?1.Imports System.Data.SqlClient2.3.Public Class Form14.Dim cn As SqlConnection5.Dim cm As SqlCommand6.Dim da As SqlDataAdapter7.Dim ds As DataSet8.9.Private Sub Button1_Click(sender As Object, e As EventAr gs) Handles Button1.Click10.Try = New SqlConnection("Data Source=(local);Initial C atalog=Sales;Integrated Security=false;User ID=sa;Password=12 3456;").Open() '此句不省13.cm = New SqlCommand("sp_getGrade", cn)mandType = CommandType.StoredProcedure '指明为存储过程15.da = New SqlDataAdapter(cm)16.ds = New DataSet()17.da.Fill(ds, "grade")18.DataGridView1.DataSource = ds.Tables("grade").Close()20.Catch ex As Exception21.MessageBox.Show("执行失败")22.End Try23.End Sub24.End Class结果如下:====================================== ========================================= =================下面是一个带参数的存储过程的调用。
VB调用存储过程
存储过程spREA TE PROCEDURE sp@dept varchar(10) ,@sno varchar(10)ASSELECT s.sno, s.sname, ISNULL(A VG(grade),-1) average FROM s,scWHERE sdept=@dept and s.sno>=@sno and s.sno=sc.sno group by s.sno,s.snameRETURNGODim cnn1 As ADODB.Connection '连接Dim mycommand As mand '命令Dim parm_dept As ADODB.Parameter '参数1Dim parm_sno As ADODB.Parameter '参数2Dim rstByQuery As ADODB.Recordset '结果集Dim strCnn As String '连接字符串Private Sub Command1_Click()Dim i As IntegerDim j As IntegerSet parm_dept = New ADODB.ParameterSet mycommand = New mand' parm_ = "name1"parm_dept.Type = adChar '参数类型parm_dept.Size = 10 '参数长度parm_dept.Direction = adParamInput'参数方向,输入或输出parm_dept.V alue = "计科系" '参数的值mycommand.Parameters.Append parm_dept '加入参数Set parm_sno = New ADODB.Parameter'parm_ = "name2"parm_sno.Type = adIntegerparm_sno.Size = 10parm_sno.Direction = adParamInputparm_sno.V alue = "1501"mycommand.Parameters.Append parm_snomycommand.ActiveConnection = cnn1'指定该command 的当前活动连接mandText = "sp"'myprocedure 是你要调用的存储过程名称mandType = adCmdStoredProc'表明command 为存储过程Set rstByQuery = New ADODB.RecordsetSet rstByQuery = mycommand.Execute()MSFlexGrid1.Rows = 1'动态设置MSFlexGrid的行和列MSFlexGrid1.Cols = rstByQuery.Fields.Count MSFlexGrid1.Row = 0For i = 0 To rstByQuery.Fields.Count - 1MSFlexGrid1.Col = iMSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name Next '设置第一行的标题,用域名填充i = 1Do While Not rstByQuery.EOFMSFlexGrid1.Rows = MSFlexGrid1.Rows + 1MSFlexGrid1.Row = i '确定行For j = 0 To rstByQuery.Fields.Count - 1MSFlexGrid1.Col = jMSFlexGrid1.Text = rstByQuery(j)'添充所有的列NextrstByQuery.MoveNexti = i + 1LoopEnd SubPrivate Sub Command2_Click()EndEnd SubPrivate Sub Form_Load()Set cnn1 = New ADODB.Connection'生成一个连接strCnn = "DRIVER=SQL Server; SERVER=192.168.1.4; UID=sa; PWD=; DA TABASE=sample"cnn1.Open strCnn '打开连接End SubPrivate Sub Form_Unload(Cancel As Integer) cnn1.Close '关闭连接Set cnn1 = Nothing '释放连接End Sub。
在.NET中调用存储过程
因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。
下面是它的定义:存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。
用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
总的来说,存储过程具有以下一些优点:◆存储过程允许标准组件式编程◆存储过程能够实现较快的执行速度◆存储过程能够减少网络流量◆存储过程可被作为一种安全机制来充分利用现在我们来看看如何在.NET中调用存储过程。
1:无参数的存储过程建立存储过程如下:Use librarydatabase //指定所要建的存储过程的数据库goCreate procedure p_book //新建存储过程p_bookAsselect*from book where条形码='ts100008' //SQL语句集合执行编译之后在数据库的可编程性节点里面的存储过程可以看得到!在VS2005里面新建一个控制台程序,新建一个方法如下:public void nopara(){SqlConnection con = newSqlConnection("server=.;database=librarydatabase;user id=sa;pwd=;"); //数据库连接字段SqlCommand com = new SqlCommand("p_book", con); //调用存储过程mandType = CommandType.StoredProcedure; //指定执行的类型con.Open(); //打开数据库连接try{SqlDataReader sdr = com.ExecuteReader(); //执行存储过程while (sdr.Read()){Console.WriteLine(sdr[2].ToString()); //sdr方括号里面的数值就是返回记录的方列,这里是显示第三列的值,从0开始算}con.Close(); //关闭数据库连接Console.ReadKey();}catch{Console.WriteLine("something is wrong");Console.ReadKey();}}此时客户端就直接调用该方法即可!2:有参数的存储过程调用有参数的存储过程其实并不复杂,和类中方法参数的传递相似,只不过存储过程里面的参数前必须要有“@”作用!建立存储过程如下:Use librarydatabase //指定所要建的存储过程的数据库goCreate procedure lib_reader@name nvarchar(20) //定义一个nvarchar型的参数,注意,用“@”修饰asselect*from reader where姓名=@name //完整的SQL语句,引用该参数执行编译。
VB调用执行存储过程
关键字:数据库;SQL Server2000;存储过程;应用程序;VB存储过程存储过程是存储在服务器上的一组预编译的Transact-SQL语句,是一种封装重复任务操作的方法,支持用户提供的变量,具有强大的编程功能。
它类似于DOS系统中的BAT文件。
在BAT文件中,可以包含一组经常执行的命令,这组命令通过BAT文件的执行而被执行。
同样的道理,可以把要完成某项任务的许多Transact-SQL语句写在一起,组织成存储过程的形式,通过执行该存储过程就可以完成这项任务。
存储过程与BAT文件又有差别,即存储过程已经进行了预编译。
1、创建存储过程的方法在Transact-SQL语言中,创建存储过程可以使用CREATE PROCEDURE语句,其语法形式如下:CREATE PROC[EDURE] procedure_name[;number][{@parameter data_type}[VARYING][=default][OUTPUT]]],…n][WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}][FOR REPLICATION]AS sql_statement[…n]在上面的CREATE PROCEDURE语句中,方括号"[ ]"中的内容是可选的,花括号"{}"中的内容是必须出现的,不能省略,[,…n]表示前面的参数样式,可以重复出现。
竖线"|"表示两边的选项可以任选一个。
下面分析该语句中各种选项的含义。
CREATE PROCEDURE是关键字,也可以写成CREATE PROC。
procedure_name是该存储过程的名称,名称可以是任何符合命名规则的标示符。
名称后的[;number]参数表示可以定义一系列的存储过程名称,这些存储过程的数量由number 指定。
参数名称可以使用@parameter data_type来指定。
vb.net接口POST方式传参数提交返回值
接⼝POST⽅式传参数提交返回值TryDim WebClientObj As New .WebClient()Dim PostVars As New ValueCollection()'URLDim url1 As String = "http://ip地址/sso/rest/user/create.json"'参数⼀:requestTime 时间差Dim requestTime As String = CLng((DateTime.UtcNow - Jan1st1970).TotalMilliseconds).ToString()'参数⼆:content。
要⽤双引号拼接 <span style="font-family: Arial, Helvetica, sans-serif;">Chr(34) 双引号的意思</span>Dim content1 As String = "{'fullName': '名字','name': '名字','sn': '名字','givenName': '名字','displayName': '名字','mail': 'sdfsadgsd@','unicodePwd': '111'}" '参数三:signDim sign As String = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(content2, "MD5")''参数四:AuthorizationDim base1 As String = "Basic WldsdzpVMkZzZEdWa1gxK0NzQzZXWHNZRHN0eEllcndMN1lkTExoWC83ZTZ6dGt3PQ=="PostVars.Add("requestTime", requestTime)PostVars.Add("content", content1)PostVars.Add("sign", sign)Try'设置HeadersWebClientObj.Headers.Add("Authorization", base1)'请求URL和参数Dim byRemoteInfo As Byte() = WebClientObj.UploadValues(url1, "POST", PostVars)'获取返回信息Dim sRemoteInfo As String = System.Text.Encoding.[Default].GetString(byRemoteInfo)'这是获取返回信息Dim str5 As String = sRemoteInfoCatchEnd TryCatch ex As ExceptionEnd Try。
VB中访问存储过程的几种办法
VB中访问存储过程的几种办法使用SQL存储过程有什么好处■SQL存储过程执行起来比SQL命令文本快得多。
当一个SQL语句包含在存储过程中时,服务器不必每次执行它时都要分析和编译它。
■调用存储过程,可以认为是一个三层结构。
这使你的程序易于维护。
如果程序需要做某些改动,你只要改动存储过程即可■你可以在存储过程中利用Transact-SQL的强大功能。
一个SQL存储过程可以包含多个SQL 语句。
你可以使用变量和条件。
这意味着你可以用存储过程建立非常复杂的查询,以非常复杂的方式更新数据库。
■最后,这也许是最重要的,在存储过程中可以使用参数。
你可以传送和返回参数。
你还可以得到一个返回值(从SQL RETURN语句)。
环境:WinXP+VB6+sp6+SqlServer2000数据库:test表:UsersCREATE TABLE [dbo].[users] ([id] [int] IDENTITY (1, 1) NOT NULL ,[truename] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,[regname] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,[pwd] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,[sex] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,[email] [text] COLLATE Chinese_PRC_CI_AS NULL ,[jifen] [decimal](18, 2) NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]ALTER TABLE [dbo].[users] WITH NOCHECK ADDCONSTRAINT [PK_users] PRIMARY KEY CLUSTERED([id]) ON [PRIMARY]GO存储过程select_usersCREATE PROCEDURE select_users @regname char(20), @numrows int OUTPUT ASSelect * from usersSELECT @numrows = @@ROWCOUNTif @numrows = 0return 0else return 1GO存储过程insert_usersCREATE PROCEDURE insert_users @truename char(20), @regname char(20),@pwd char(20),@sex char(20),@email char(20),@jifen decimal(19,2)ASinsert into users(truename,regname,pwd,sex,email,jifen) values(@truename,@regname,@pwd,@sex,@email,@jifen)GO在VB环境中,添加DataGrid控件,4个按钮,6个文本框代码简单易懂。
调用存储过程的通用方法
调用存储过程的通用方法[摘要] 在中存储过程的调用模式几乎一样,不同之处是每个存储过程的参数不同,所以每调用一次存储过程重复代码很多,这在做项目时很麻烦。
笔者经过实践实现了在中调用存储过程的简单方法,该方法只需要提供要调用的存储过程名字和提供具体的参数值就可实现任何存储过程的调用。
[关键词] ;存储过程;系统表;信息结构视图笔者在用做项目时,很多时候要调用数据库中的存储过程,因为使用存储过程使得程序在调试、升级、维护方面都变得方便,时间久了,笔者发现存储过程的调用模式几乎一样,差别只是在于调用不同的存储过程的参数不同,所以每调用一次存储过程都要写一大堆几乎一样的代码,这在做项目时很麻烦,所以就想找一种简便的调用存储过程的方法。
笔者通过查找资料和编程实践实现了在中调用存储过程的通用方法。
该方法只需要提供要调用的存储过程名字和提供具体的参数值就可实现任何存储过程的调用。
在中存储过程分为有返回值的和无返回值的,不论哪种存储过程,它的调用方法都可以概括为下面的几步:(1) 声明一个Sql Connection实例。
(2) 声明一个Sql Command实例,并且设置其Connection属性为刚声明的Sql Connection实例,设置CommandName为存储过程名,CommandType为存储过程。
(3) 向声明的Sql Command实例的Parameters集合中添加所有的存储过程调用需要的参数。
(4) 声明Sql DataAdapter和DataSet,设置Sql DataAdapter的SelectCommand 属性为2中声明的Sql Command实例,再调用其Fill方法来把返回的行集填充到DataSet中。
(5) 关闭Sql Connection实例。
(6) 释放声明的各个实例。
调用不同的存储过程,只是第二步的CommandName和第三步中的参数不同。
我们要写一个通用的调用存储过程的方法,该方法只需要提供要调用的存储过程名字和提供具体的参数值就可实现任何存储过程的调用,那么就要自动实现如何根据存储过程名来得到它所有的参数信息,再根据这些参数信息自动创建各个参数。
VB.NET调用过程步骤详解
调用过程步骤详解•调用过程步骤详解调用过程在这篇文章中被分为三个步骤为大家详细介绍。
希望大家可以通过这三个步骤的介绍,充分掌握这一工程的实现的技巧。
调用过程的应用,是一个比较基础的操作技巧。
作为初学者来说,我们需要在学习的过程中不断的从实际操作中去积累经验,来巩固我们所掌握的书面知识。
首先让我们一起来看看调用过程的实现,以此来初步掌握这一语言的应用技巧。
调用过程一、调用Sub过程与Function过程不同,在表达式中,Sub过程不能用其名字调用,调用Sub过程的是一个独立的语句。
Sub过程还有一点与函数不同,它不会用名字返回一个值。
但是,与Function过程一样,Sub过程也可以修改传递给它们的任何变量的值。
调用Sub过程有两种方法:1.'以下两个语句都调用了名为2.MyProc的Sub过程。
3.4.Call MyProc(FirstArgument,5.SecondArgument)6.7.MyProc(FirstArgument,8.SecondArgument)调用过程二、调用函数过程通常,调用自行编写的函数过程的方法和调用Visual Basic内部函数过程(例如Abs)的方法一样:即在表达式中写上它的名字。
下面的语句都调用函数MyFunc:1.TextBox1.Text=2.CStr(10*MyFunc)3.4.X=MyFunc()就象调用Sub过程那样,也能调用函数。
下面的语句都调用同一个函数:1.Call Year(Now)2.3.Year(Now)当用这种方法调用函数时,Visual Basic放弃返回值。
调用过程三、调用其他模块中的过程在工程中的任何地方都能调用类模块或标准模块中的公用过程。
可能需要指定这样的模块,它包含正在调用的过程。
调用其他模块中的过程的各种技巧,取决于该过程是在类模块中还是在标准模块中。
在类模块中调用过程要求调用与过程一致并且指向类实例的变量。
例如,DemoClass是类Class1的实例:1.Dim DemoClass As2.New Class13.4.DemoClass.SomeSub在引用一个类的实例时,不能用类名作限定符。
获取存储过程中的返回值
1.OUPUT参数返回值例:向Order表插入一条记录,返回其标识CREATE PROCEDURE[dbo].[nb_order_insert](@o_buyerid int ,@o_id bigint OUTPUT)ASBEGINSET NOCOUNT ON;BEGININSERT INTO[Order](o_buyerid )VALUES (@o_buyerid )SET@o_id=@@IDENTITYENDEND存储过程中获得方法:DECLARE@o_buyerid intDECLARE@o_id bigintEXEC[nb_order_insert]@o_buyerid ,o_id bigint2.RETURN过程返回值CREATE PROCEDURE[dbo].[nb_order_insert](@o_buyerid int ,@o_id bigint OUTPUT)ASBEGINSET NOCOUNT ON;IF(EXISTS(SELECT*FROM[Shop]WHERE[s_id]=@o_shopid)) BEGININSERT INTO[Order](o_buyerid )VALUES (@o_buyerid )SET@o_id=@@IDENTITYRETURN1—插入成功返回1ENDELSERETURN0—插入失败返回0END存储过程中的获取方法DECLARE@o_buyerid intDECLARE@o_id bigintDECLARE@result bitEXEC@result=[nb_order_insert]@o_buyerid ,o_id bigint3.SELECT 数据集返回值CREATE PROCEDURE[dbo].[nb_order_select](@o_id int)ASBEGINSET NOCOUNT ON;SELECT o_id,o_buyerid FROM[Order]WHERE o_id =@o_idGO存储过程中的获取方法(1)、使用临时表的方法CREATE TABLE[dbo].[Temp]([o_id][bigint]IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,[o_buyerid][int]NOT NULL)INSERT[Temp]EXEC[nb_order_select]@o_id–这时Temp就是EXEC执行SELECT 后的结果集SELECT*FROM[Temp]DROP[Temp]—删除临时表(2)、速度不怎么样.(不推荐)SELECT*from openrowset(’provider_name','Trusted_Connection=yes’,'exec nb _order_select’)1.获取Return返回值程序代码//存储过程//Create PROCEDURE MYSQL// @a int,// @b int//AS// return @a + @b//GOSqlConnection conn = newSqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToStrin g());conn.Open();SqlCommandMyCommand = new SqlCommand("MYSQL", conn); mandType = CommandType.StoredProcedure; MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int)); MyCommand.Parameters["@a"].Value = 10;MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int)); MyCommand.Parameters["@b"].Value = 20;MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int)); MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue; MyCommand.ExecuteNonQuery();Response.Write(MyCommand.Parameters["@return"].Value.ToString());2.获取Output输出参数值程序代码//存储过程//Create PROCEDURE MYSQL// @a int,// @b int,// @c int output//AS// Set @c = @a + @b//GOSqlConnection conn = newSqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToStrin g());conn.Open();SqlCommandMyCommand = new SqlCommand("MYSQL", conn); mandType = CommandType.StoredProcedure; MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int)); MyCommand.Parameters["@a"].Value = 20;MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int)); MyCommand.Parameters["@b"].Value = 20;MyCommand.Parameters.Add(new SqlParameter("@c", SqlDbType.Int)); MyCommand.Parameters["@c"].Direction = ParameterDirection.Output; MyCommand.ExecuteNonQuery();Response.Write(MyCommand.Parameters["@c"].Value.ToString());C#接收存储过程返回值:public static intUser_Add(User us){intiRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommandcmd = new SqlCommand("User_Add", conn);mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UName", us.UName);cmd.Parameters.AddWithValue("@UPass", us.UPass);cmd.Parameters.AddWithValue("@PassQuestion", us.PassQuestion);cmd.Parameters.AddWithValue("@PassKey", us.PassKey);cmd.Parameters.AddWithValue("@Email", us.Email);cmd.Parameters.AddWithValue("@RName", us.RName);cmd.Parameters.AddWithValue("@Area", us.Area);cmd.Parameters.AddWithValue("@Address", us.Address);cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);cmd.Parameters.AddWithValue("@Phone", us.Phone);cmd.Parameters.AddWithValue("@QQ", us.QQ);cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;try{conn.Open();cmd.ExecuteNonQuery();iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close();}return iRet;}C#接收存储过程输出参数:public static decimal Cart_UserAmount(int UID){decimal iRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommandcmd = new SqlCommand("Cart_UserAmount", conn);mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UID", UID);cmd.Parameters.Add("@Amount",SqlDbType.Decimal).Direction=ParameterDirection.Output;try{conn.Open();cmd.ExecuteNonQuery();iRet = (decimal)cmd.Parameters["@Amount"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close();}return iRet;}。
vb调用存储过程的返回值 -回复
vb调用存储过程的返回值-回复VB调用存储过程的返回值在VB中,调用存储过程是一种非常常见的操作。
存储过程可以用于执行一系列的数据库操作,并返回一个结果集、一个标志值或者两者的组合。
通过调用存储过程,我们可以在VB程序中对数据库进行相应的操作和查询。
本文将详细介绍如何在VB中调用存储过程,并获取存储过程的返回值。
第一步:准备工作在开始调用存储过程之前,我们首先需要在数据库中创建相应的存储过程。
存储过程可以使用SQL Server Management Studio等工具进行创建和修改。
以下是一个简单的存储过程示例:CREATE PROCEDURE GetProductCount@CategoryID INT,@ProductCount INT OUTPUTASBEGINSELECT @ProductCount = COUNT(*)FROM ProductsWHERE CategoryID = @CategoryIDEND上面的存储过程接受一个输入参数@CategoryID,并将符合条件的产品数量赋值给输出参数@ProductCount。
接下来,我们将在VB中调用这个存储过程,并获取返回的产品数量。
第二步:连接数据库首先,我们需要在VB中建立与数据库的连接。
可以使用ADODB库的Connection对象来实现这一功能。
以下是一个建立数据库连接的示例代码:Dim conn As New ADODB.Connectionconn.ConnectionString = "Provider=SQLOLEDB;DataSource=ServerName;Initial Catalog=DatabaseName;UserID=UserName;Password=Password"conn.Open在上面的代码中,需要将ServerName、DatabaseName、UserName 和Password替换为实际的数据库服务器名称、数据库名称、用户名和密码。
VB.NETFunction过程使用方法详解
Function过程使用方法详解• Function过程使用方法详解 Function过程和Sub过程一样,也是一个独立的过程。
可以进行一系列语句的执行并对其的参数进行修改。
我们可以在这里学到这一过程的具体用法。
编程语言的出现,在一定程度上改变了编程人员的编程方式,提高了编程人员的开发效率。
在这里我们将会了解到 Function过程的相关应用方法,希望可以帮助大家提高对这一语言的认识。
包含内置的或内部的函数,如MsgBox、CStr等。
此外,还可用Function语句编写自己的 Function过程。
函数过程的语法是:1.{Private|Public|Friend|}2.Function functionname3.(argument list)[As data type]4.5.Statements6.7.End Function与Sub过程一样, Function过程也是一个独立的过程,可读取参数、执行一系列语句并改变其参数的值。
与Sub过程不同的是,Function过程可返回一个值到调用的过程。
在Sub过程与Function过程之间有三点区别:•鼠标手势实现技巧分享•组件叠加具体应用方法详解•存取数据库图片相关方法介绍•多维数组基本概念详解•调整控件实现技巧轻松掌握(1)一般来说,语句或表达式的右边包含函数过程名和参数(returnvalue=function),这就调用了函数。
(2)与变量完全一样,函数过程有数据类型。
这就决定了返回值的类型(如果没有As子句,缺省的数据类型为Object)。
(3)可以给functionname赋一个值,即为返回的值。
Function过程返回一个值时,该值可成为表达式的一部分。
例如,下面是已知直角三角形直角边的值,计算第三边(斜边)的函数:1.Function Hypotenuse(A as2.Integer,B As Integer)3.As String4.5.Hypotenuse=Math.6.Sqrt(A^2+B^2)7.8.End Function在Visual Basic中调用 Function过程的方法和调用任何内部函数的方法是一样的:bel1.Text=CStr(Hypotenuse2.(CInt(Text1.Text),3.CInt(Text2.Text)))4.5.strX=CStr(Hypotenuse6.(Width,Height))【责任编辑:曹凯。
VBA操作数据库存储过程的技巧与示例
VBA操作数据库存储过程的技巧与示例在使用VBA进行数据库操作时,使用存储过程可以提高效率和安全性。
存储过程是一组预先编写好的SQL语句,可以在数据库中存储和执行。
本文将介绍如何使用VBA操作数据库存储过程,并提供一些示例供参考。
1. 连接数据库在使用VBA操作数据库存储过程之前,首先需要连接到目标数据库。
可以使用ADODB对象来连接数据库,例如:```vbaDim conn As ObjectSet conn = CreateObject("ADODB.Connection")conn.ConnectionString = "Provider=SQLOLEDB;Data Source=服务器地址;Initial Catalog=数据库名称;User ID=用户名;Password=密码"conn.Open```在此示例中,需要替换"服务器地址"、"数据库名称"、"用户名"和"密码"为实际的连接信息。
2. 创建存储过程使用VBA创建存储过程可以通过在数据库中执行CREATE PROCEDURE语句来实现。
例如,创建一个简单的更新存储过程:```vbaDim strSQL As StringstrSQL = "CREATE PROCEDURE UpdateEmployee@EmployeeID INT, @FirstName VARCHAR(50), @LastName VARCHAR(50) AS" & _" UPDATE Employee SET FirstName = @FirstName, LastName = @LastName WHERE EmployeeID = @EmployeeID"conn.Execute strSQL```在此示例中,UpdateEmployee是存储过程的名称,@EmployeeID、@FirstName和@LastName是存储过程的参数,Employee是数据库中的表。
存储过程输出和输入和返回值的使用
1. 存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况 (1)如果通过查询分析器执行该存储过程,在显示栏中如果有影响的行数,则影响几行count就是几(2)如果通过查询分析器执行该存储过程,在显示栏中如果显示'命令已成功完成。
'则count = -1;在显示栏中如果有查询结果,则count = -1总结:A.ExecuteNonQuery()该方法只返回影响的行数,如果没有影响行数,则该方法的返回值只能是-1,不会为0。
B.不论ExecuteNonQuery()方法是按照CommandType.StoredProcedure或者CommandType.Text执行,其效果和A一样。
---------------------------------------------------------------------------------------------------------------------------------------------------2. 获取存储过程的返回值--通过查询分析器获得(1)不带任何参数的存储过程(存储过程语句中含有return)---创建存储过程CREATE PROCEDURE testReturnASreturn 145GO---执行存储过程DECLARE @RC intexec @RC=testReturnselect @RC---说明查询结果为145(2)带输入参数的存储过程(存储过程语句中含有return)---创建存储过程create procedure sp_add_table1@in_name varchar(100),@in_addr varchar(100),@in_tel varchar(100)asif(@in_name = '' or @in_name is null)return 1elsebegininsert into table1(name,addr,tel) values(@in_name,@in_addr,@in_tel) return 0end---执行存储过程<1>执行下列,返回1declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count<2>执行下列,返回0declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count---说明查询结果不是0就是1(3)带输出参数的存储过程(存储过程中可以有return可以没有return)例子A:---创建存储过程create procedure sp_output@output int outputasset @output = 121return 1---执行存储过程<1>执行下列,返回121declare @out intexec sp_output @out outputselect @out<2>执行下列,返回1declare @out intdeclare @count intexec @count = sp_output @out outputselect @count有return,只要查询输出参数,则查询结果为输出参数在存储过程中最后变成的值;只要不查询输出参数,则查询结果为return返回的值例子B:---创建存储过程create procedure sp_output@output int outputasset @output = 121---执行存储过程<1>执行下列,返回121declare @out intexec sp_output @out outputselect @out<2>执行下列,返回0declare @out intdeclare @count intexec @count = sp_output @out outputselect @count---说明没有return,只要查询输出参数,则查询结果为输出参数在存储过程中最后变成的值;只要不查询输出参数,则查询结果为0(1)存储过程共分为3类:A.返回记录集的存储过程---------------------------其执行结果是一个记录集,例如:从数据库中检索出符合某一个或几个条件的记录B.返回数值的存储过程(也可以称为标量存储过程)-----其执行完以后返回一个值,例如:在数据库中执行一个有返回值的函数或命令C.行为存储过程-----------------------------------用来实现数据库的某个功能,而没有返回值,例如:在数据库中的更新和删除操作(2)含有return的存储过程其返回值为return返回的那个值(3)没有return的存储过程,不论执行结果有无记录集,其返回值是0(4)带输出参数的存储过程:如果有return则返回return返回的那个值,如果要select输出参数,则出现输出参数的值,于有无return无关3.获取存储过程的返回值--通过程序获得SqlParameter[] cmdParms = { .. ,newSqlParameter("@return",SqlDbType.Int)};cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.ReturnValue;或者cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Output或者cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Input;得到返回值object obj = cmdParms[cmdParms.Length - 1].Value;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(@sUserID,@sClaimMethod,@sInvoiceNum,@sInvoiceDate,@sBuyCity)
调用存储过程并得到返回值
//存储过程代码
CREATE PROCEDURE [AddNewInvoiceInfo] (@sUserID int,@sClaimMethod varchar(50),@sInvoiceNum
varchar(50),@sInvoiceDate datetime,@sBuyCity varchar(50))AS
InvoiceID = CMD.Parameters(@sInvoiceID).Value.ToString()
CMD.Dispose()
Catch ex As Exception
Response.Write(ex.ToString())
Finally
CN.Close()
CMD.Parameters(@sInvoiceDate).Value = InvoiceDate.SelectedDate.Date
CMD.Parameters.Add(New SqlParameter(@sBuyCity, SqlDbType.VarChar, 50))
CMD.Parameters(@sBuyCity).Value = BuyCity.Text
return @@IDENTITY
GO
//调用存储过程代码
Dim CN As New SqlConnection()
Dim InvoiceID As String
Try
CN.ConnectionString = DBConStr
CN.Open()
Dim CMD As SqlCommand
CMD = New SqlCommand(AddNewInvoiceInfo, CN)
mandType = CommandType.Storedቤተ መጻሕፍቲ ባይዱrocedure
CMD.Parameters.Add(New SqlParameter(@sUserID, SqlDbType.Int))
CMD.Parameters.Add(New SqlParameter(@sInvoiceID, SqlDbType.Int))
CMD.Parameters(@sInvoiceID).Direction = ParameterDirection.ReturnValue
CMD.ExecuteNonQuery()
End Try
CMD.Parameters.Add(New SqlParameter(@sInvoiceNum, SqlDbType.VarChar, 50))
CMD.Parameters(@sInvoiceNum).Value = InvoiceNum.Text
CMD.Parameters.Add(New SqlParameter(@sInvoiceDate, SqlDbType.DateTime))
CMD.Parameters(@sUserID).Value = CInt(UserID.Text)
CMD.Parameters.Add(New SqlParameter(@sClaimMethod, SqlDbType.VarChar, 50))
CMD.Parameters(@sClaimMethod).Value = TransName.Text