将字符串参数发送到存储过程

Posted

技术标签:

【中文标题】将字符串参数发送到存储过程【英文标题】:Send string Parameter to Stored Procedure 【发布时间】:2014-12-05 08:13:33 【问题描述】:

我正在处理连接到 SQL 数据库 (mysql 2008) 的 asp.net C# 项目。这是我的 C# 类:

 public static DataTable GetUnitByName(string unit)
    
        Database db = DatabaseFactory.CreateDatabase();
        string sqlCommand = "GetUnitByName";
        DbCommand dbCommandWrapper = db.GetStoredProcCommand(sqlCommand);
        db.AddInParameter(dbCommandWrapper, "@Unit", DbType.String, unit);
        DataSet ds = db.ExecuteDataSet(dbCommandWrapper);
        DataTable dt = ds.Tables[0];
        return dt;
    

这是存储过程:

alter PROCEDURE [dbo].[GetUnitByName]
(
@Unit nvarchar
)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON
    DECLARE @Err int
    -- Insert statements for procedure here
select * from Unit where Name=@Unit
   SET @Err = @@Error

    RETURN @Err
END

我这样调用程序: DataTable unit1 = Unit.GetUnitByName(per100gText[1]enter code here); , per10gText 是一个字符串列表。 但它返回空数据表。与 sql server 的连接,在调试中我看到该过程无法读取参数。 请提供任何帮助。

【问题讨论】:

【参考方案1】:

如果你想让 proc 返回参数,你需要先将它声明为输出参数

alter PROCEDURE [dbo].[GetUnitByName]
(
@Unit nvarchar , @err int output
)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON

    -- Insert statements for procedure here
select * from Unit where Name=@Unit
   SET @Err = @@Error

    RETURN @Err
END

【讨论】:

我不经常使用sql代码,你能解释一下函数吗?并直接使用sql和C#返回值? 我不知道 c# -:( 阅读有关 proc 和 func 的信息:***.com/questions/1179758/…

以上是关于将字符串参数发送到存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何在 c# 实体框架核心中使用 FromSqlRaw() 将 OUTPUT 参数发送到 MySql 存储过程

SQL Server 2005 使用 GETDATE() 作为参数通过 SSIS 运行存储过程

SQL 存储过程和数据集

过程或函数“过程名称”需要一个未提供的参数“参数名称”很少发生

如何给SQLSERVER存储过程传递数组参数

创建存储过程时出错