CREATE
procedure
pr_AddProduct
(
@ChineseName
nvarchar
(
50
),
@EnglishName
nvarchar
(
50
),
@Supplier
text
,
@MOQ
float
,
@Material
nvarchar
(
50
),
@Size
float
,
@SGW
nvarchar
(
50
),
@CategoryID
int
,
@TPI
text
,
@RSC
decimal
)
as
Declare
@ProductId
int
begin
transaction
insert
into
Product
(
ChineseName,
EnglishName,
Supplier,
MOQ,
Material,
size,
SGW,
CategoryID,
TPI,
RSC
)
VALUES
(
@ChineseName
,
@EnglishName
,
@Supplier
,
@MOQ
,
@Material
,
@Size
,
@SGW
,
@CategoryID
,
@TPI
,
@RSC
)
Select
@ProductId
=
@@IDENTITY
commit
transaction
return
@ProductId
GO




public
int
AddProduct(Product prtd)
...
{
try
...{
string strsql = "pr_AddProduct";
SqlParameter[] sqlParam =
...{
new SqlParameter("@ChineseName",SqlDbType.NVarChar),
new SqlParameter("@EnglishName",SqlDbType.NVarChar),
new SqlParameter("@Supplier",SqlDbType.Text),
new SqlParameter("@MOQ",SqlDbType.Float),
new SqlParameter("@Material",SqlDbType.NVarChar),
new SqlParameter("@size",SqlDbType.Float),
new SqlParameter("@SGW",SqlDbType.NVarChar),
new SqlParameter("@CategoryID",SqlDbType.Int),
new SqlParameter("@TPI",SqlDbType.Text),
new SqlParameter("@RSC",SqlDbType.NVarChar),
new SqlParameter("@ReturnValue",SqlDbType.Int)
};
sqlParam[0].Value = prtd.ChineseName;
sqlParam[1].Value = prtd.EnglishName;
sqlParam[2].Value = prtd.Supplier;
sqlParam[3].Value = prtd.MOQ;
sqlParam[4].Value =prtd.Material;
sqlParam[5].Value=prtd.Size;
sqlParam[6].Value=prtd.Sgw;
sqlParam[7].Value=prtd.CategoryID;
sqlParam[8].Value = prtd.Tpi;
sqlParam[9].Value = prtd.Rsc;
sqlParam[10].Direction=System.Data.ParameterDirection.ReturnValue;
SqlHelper.ExecuteNonQuery(SqlHelper.CONNSTR, CommandType.StoredProcedure, strsql, sqlParam);
return Convert.ToInt32(sqlParam[10].Value);
}
catch(Exception ex)
...{
throw ex;
}
}
受启示于上面的代码:
在 public sealed class SqlHelper
{
public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{
int id;
using (SqlConnection conn = new SqlConnection(_connString))
{
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
try
{
// PrepareCommand(cmd, conn,cmdType, cmdText, commandParameters);
int res;
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.CommandType = cmdType;
if (commandParameters != null)
{
cmd.Parameters.AddRange(commandParameters);
}
res = cmd.ExecuteNonQuery();
conn.Close();
if (res >= 1)
{
id = Convert.ToInt32(cmd.Parameters[5].Value);
}
else
{
// MainID = -1;
id = -1;
return -1;
}
}
catch (SqlException)
{
throw;
}
}
}
}
}
PROCEDURE:
CREATE PROCEDURE [dbo].[cor_InsertServerConfig]
(
@ServerName varchar(20),
@ServerIP varchar(20),
@ServerCategory varchar(25),
@ServerState char(1),
@ServerAbility int
--@ID int output
)
AS
DECLARE @ID INT
BEGIN transaction
SET NOCOUNT ON;
IF EXISTS ( SELECT 1 FROM [ServerConfig] WHERE ServerName = @ServerName)
BEGIN
--return 0
SELECT @ID = 0
END
ELSE
BEGIN
INSERT INTO [ServerConfig](ServerName,ServerIP,ServerCategory,ServerState,ServerAbility)
VALUES (@ServerName,@ServerIP,@ServerCategory,@ServerState,@ServerAbility)
--SELECT ID FROM INSERTED --C#里'INSERTED'对象名无效
--SELECT SCOPE_IDENTITY()
set @ID = @@identity
commit transaction
---select @ID 非Output,而是return,用select 即使成功插入返回的也为0
return @ID
END
DAC:
public static int AddServerConfig(string serverName, string serverIP, string serverCategory, string serverState, int serverAbility)
{
SqlCommand comm = new SqlCommand("cor_InsertServerConfig");
comm.CommandType = CommandType.StoredProcedure;
SqlParameter [] para = new SqlParameter[6];
para[0] = new SqlParameter("@ServerName",SqlDbType.NVarChar,20);
para[0].Value = serverName;
para[1] = new SqlParameter ("@ServerIP",SqlDbType.VarChar,20);
para[1].Value = serverIP;
para[2] = new SqlParameter("@ServerCategory",SqlDbType.NVarChar,25);
para[2].Value = serverCategory;
para[3] = new SqlParameter("@ServerState",SqlDbType.Char,1);
para[3].Value = serverState;
para[4] = new SqlParameter("@ServerAbility",SqlDbType.Int);
para[4].Value = serverAbility;
// para[5] = new SqlParameter("@ID ",SqlDbType.Int);
// para[5].Direction=ParameterDirection.Output; 注非Output输出的值,而是return的值
para[5] = new SqlParameter("@ReturnValue", SqlDbType.Int);
// para[5].Direction = ParameterDirection.ReturnValue;
//para[5].Value = Convert.ToInt32(ID);
para[5].Direction = System.Data.ParameterDirection.ReturnValue;
SqlHelper.ExecuteNonQuery(CommandType.StoredProcedure, "cor_InsertServerConfig", para);
return Convert.ToInt32(para[5].Value);
}
本文详细介绍了如何使用SQL操作和存储过程来实现产品信息的添加,包括参数设置、事务处理以及返回值获取。
1795

被折叠的 条评论
为什么被折叠?



