sql存储过程调用示例

1.配置文件:

<connectionStrings>
<add name="constr" connectionString="data source=127.0.0.1;initial catalog=test;user id=sa;password=123"/>
</connectionStrings>

2.代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data.SqlClient;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string constr = System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString;

using (SqlConnection con =new SqlConnection(constr))
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = System.Data.CommandType.StoredProcedure;

cmd.Connection = con;


cmd.Parameters.Add("@in_str", System.Data.SqlDbType.VarChar);

cmd.Parameters.Add("@out_str", System.Data.SqlDbType.NVarChar);
cmd.Parameters["@out_str"].Direction = System.Data.ParameterDirection.Output;

cmd.CommandText = "sp_test";

cmd.Parameters["@in_str"].Value = "input str";
cmd.Parameters["@out_str"].Value = "";

cmd.Parameters["@in_str"].Size =20;//此处如果没有赋值,那么就会按照最初给的值的大小来进行指定
cmd.Parameters["@out_str"].Size = 200;

SqlDataAdapter sda = new SqlDataAdapter(cmd);

System.Data.DataTable dt = new System.Data.DataTable("table_name");

sda.Fill(dt);

Console.WriteLine("@in_st----{0}", cmd.Parameters["@in_str"]);

Console.WriteLine("@out_str---{0}", cmd.Parameters["@out_str"]);

if (dt!=null && dt.Rows.Count >0)
{

foreach (System.Data.DataRow item in dt.Rows)
{
string msg = string.Empty;

for (int i = 0; i < dt.Columns.Count; i++)
{
msg = msg + "---" + item[i].ToString();
}

Console.WriteLine(msg);
}
}

Console.ReadKey();

}

}
}
}

3.存储过程:

create PROCEDURE sp_test
@in_str VARCHAR(20),
@out_str NVARCHAR(200) OUTPUT
AS
BEGIN

BEGIN TRY

SET @in_str ='wo shi instr';

SET @out_str ='wo shi out_str'

IF not EXISTS(SELECT * FROM sys.objects WHERE type='U' AND name ='test_table')
BEGIN
CREATE TABLE test_table
(
id INT IDENTITY(1,1),
emp_no VARCHAR(20),
emp_name NVARCHAR(50)
)

DECLARE @index INT
SET @index =1;

--SELECT RAND(1)

WHILE(@index <50)
BEGIN
INSERT INTO dbo.test_table
( emp_no, emp_name )
VALUES (
CEILING(RAND()*100), -- emp_no - varchar(20) 1--100
FLOOR(RAND()*100) -- emp_name - nvarchar(50) 0--99
)
SET @index +=1;
END



END

SELECT * FROM dbo.test_table

END TRY


BEGIN CATCH
SET @out_str ='exception'+ERROR_MESSAGE();

PRINT @out_str
END CATCH


END

原文地址:https://www.cnblogs.com/muzililong/p/10693439.html