c# – 在SQL Server表中搜索值列表的最有效方法

我正在开发一个连接到SQL Server数据库的C#Win-forms应用程序.我有一种情况,我必须从Excel工作表中解析数据并搜索表的所有列中的每个值.并在最后显示其值匹配的表行.

现在我正在做的是

>我已将整个Excel工作表解析为DataTable
>我在SQL服务器中有一个存储过程,它接受一个字符串输入并在表的所有列中搜索它,如果匹配则返回一行.
>现在我将Datatable的每个值(从excel表中提取)传递给存储过程进行搜索.

请指导我是否是一种有效的方式,或者给我建议有效地实现它.

最佳答案 您可以使用Table Valued参数,而不是在SQL中,您可以使用游标或循环遍历传递的表并搜索SQL表中的每一列.这是一个简单的例子.

在数据库中创建一个新的Tpye

CREATE TYPE [dbo].[SearchInDB] AS TABLE(
[Id] [int] NOT NULL
)

在SP中,您将从C#代码传递此类型.您的SP会像这样收到它

ALTER PROCEDURE [dbo].[YourSPNameHere]  
@DataToSearch dbo.SearchInDB ReadOnly  
AS  
BEGIN  
--Your SP logic here
END

在您的代码中,您将创建一个DataTable并使用值填充数据表并将其传递给SP

DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
//Add rows in datatable with values
DataRow dr = dt.NewRow();
dr["Id"] = 10;
dt.Rows.Add(dr);

//Now pass this table to SP as parameter
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@DataToSearch"; 
parameter.SqlDbType = System.Data.SqlDbType.Structured; 
parameter.Value = dt;

注意

如果需要,我只添加了一列您需要添加其他列.要从传递给SP的参数中获取值,您必须使用循环或使用游标. Here是另一个例子的链接

点赞