【发布时间】:2018-02-16 12:16:03
【问题描述】:
我正在为 SQL Server 创建一个存储过程以从 C# 应用程序调用。存储过程包含一些动态创建的 SQL,它接收一个参数以使用查询执行 sp_executesql,但是当我从 C# 应用程序运行它时,我没有得到结果。
当我从 SQL Server Management Studio 调用该过程时,我得到了所有结果。
例如:我得到了我的表 Products
id | Descrip
1 Pen
2 Pencil
3 Table
我创建了我的存储过程
CREATE PROCEDURE [dbo].[proc_getproductslist]
@idProducts varchar(max)
AS
BEGIN
DECLARE @SQL nvarchar(max)
SET @SQL = 'SELECT * FROM Products WHERE id IN ('+@idProducts +')'
EXEC sp_executesql @SQL
END
如果我在 SSMS 中执行:
EXECUTE proc_getproductslist '''1'',''2'''
这行得通!但是...从 C# 应用程序这不起作用
C#代码:
DataTable dt = new DataTable();
DataTable d1 = new DataTable();
using (SqlConnection cn = new SqlConnection("cnxstring"))
{
cn.Open();
SqlCommand cmd1 = new SqlCommand("proc_getproductslist", cn, sqlTran);
cmd1.CommandType = CommandType.StoredProcedure;
try
{
cmd1.Parameters.Add("@numguia", SqlDbType.VarChar).Value = "'''1'',''2'''";
SqlDataAdapter da1 = new SqlDataAdapter();
da1.SelectCommand = cmd1;
da1.Fill(d1);
}
catch (SqlException exsql)
{
try
{
sqlTran.Rollback();
}
catch (Exception exRollback)
{
}
}
catch (Exception ex)
{
}
finally
{
cn.Close();
}
return d1;
}
当我从我的 C# 应用程序调用存储过程时,它不会返回任何内容。
请帮助我如何完成这项工作。
谢谢
【问题讨论】:
-
为什么不用标准参数?
标签: c# sql-server stored-procedures dynamic