我正在开发一个连接到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是另一个例子的链接