搜索SQL Server表

时间:2015-06-05 05:37:42

标签: c# sql-server winforms

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

现在我正在做的是

  1. 我已将整个Excel工作表解析为DataTable
  2. 我在SQL server中有一个存储过程,它接受一个字符串输入并在表的所有列中搜索它,如果匹配则返回一行。
  3. 现在我将Datatable的每个值(从excel表中提取)传递给存储过程进行搜索。
  4. 请指导我,这是一种有效的方式,还是给我一个有效实现它的建议。

2 个答案:

答案 0 :(得分:2)

您可以使用Table Valued参数,而不是在SQL中,您可以对传递的表使用cursorloop,并搜索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是另一个示例的链接

答案 1 :(得分:0)

您可以使用SQL Server SSIS包直接将excel导入数据库表,并可以使用存储过程中的循环或游标搜索表