×

executenonquery 返回 存储过程

如何调用ExecuteNonQuery返回存储过程的值?为什么WinHttp的ResponseText属性返回乱码

admin admin 发表于2022-06-23 03:10:55 浏览110 评论0

抢沙发发表评论

如何调用ExecuteNonQuery返回存储过程的值


ExecuteNonQuery 返回的是最后一条SQL语句影响的行数。
如果你想得到存储过程中的Return,那存储过程中,你必须写Return 0或Return 1。 Return 只能是int
另外还有输出参数,可以是任意类型。
概念别搞混了。
假设有存储过程如下:
CREATE PROCEDURE [dbo].[sp_add]
(
@x int,
@y int,
@r int output
)
AS
BEGIN
SET NOCOUNT ON;
set @r = @x + @y;
return 0;
END
调用方式:
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = xxxx;
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = “sp_add“;
SqlParameter ps = new SqlParameter;
ps = new SqlParameter(“@x“, 1);
ps = new SqlParameter(“@y“, 2);
ps = new SqlParameter(“@r“, SqlDbType.Int);
ps.Direction = ParameterDirection.Output;
ps = new SqlParameter();
ps.SqlDbType = SqlDbType.Int;
ps.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.AddRange(ps);
int r = cmd.ExecuteNonQuery();
Console.WriteLine(string.Format(“@r={0},存储过程返回:{1},ExecuteNonQuery返回:{2}“, ps.Value, ps.Value, r));
}
}
看一下都返回了此什么。

为什么WinHttp的ResponseText属性返回乱码


在servlet中设置:response.setCharsetEncoding(“UTF-8“)或者是GBK试试,还有你的JSP页面是不是UTF-8格式,又或者是你的浏览器的编码设置了其他的编码格式,按照楼上的设置一下吧;

调用exe 程序,如何获取返回的字符串


// start.cpp : Defines the entry point for the console application.// #include “stdafx.h“ #include 《iostream》#include 《windows.h》using namespace std; bool Ccmd(char * pDir,char * fileOut){ SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; HANDLE hStdOutput=CreateFile(fileOut,GENERIC_WRITE,0,&sa,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);//打开输出文件 STARTUPINFO si; PROCESS_INFORMATION pi; si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdOutput=(HANDLE)hStdOutput; si.hStdError=(HANDLE)hStdOutput; si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; // DWORD dw = CREATE_NO_WINDOW; CreateProcess(NULL,pDir,NULL,NULL,TRUE,NULL,NULL,NULL,&si,π); CloseHandle(hStdOutput); return true;} int main(int argc, char* argv){ char * fileOut =“d:\\1000\\out.txt“; char * pir=“cl d:\\1000\\add.cpp“; Ccmd(pir,fileOut); return 0;}

1 dos命令的输出可以按楼上横秋朋友的方法把输出重定向到文件,然后自己去读文件中内容来得到字符串;2 如果那个“别的应用程序”不是dos命令,也不是源程序(即只有exe文件),那只好在你的程序中捕捉它的输出窗口中的内容;3 如果那个“别的应用程序”是你的另一个源程序的话,那就好办了,用snakebite2008(唢呐科比特)朋友说的方法随便选一个就行。
-返回