在c#中使用临时表

7 c# sql temp-tables

我将excel表读入datagrid.从那里,我已经设法将网格的行读入DataTable对象.DataTable对象具有数据,因为当我使网格的数据源与该表对象相等时,将填充网格.

我的问题:我想使用表对象并使用SQL服务器操纵它的值(即我想将它存储为临时表并使用C#代码中的SQL查询对其进行操作,我希望它返回不同的结果inte一个网格.(我不知道如何使用C#中的临时表)

这是单击按钮时执行的代码....

 SqlConnection conn = new SqlConnection("server = localhost;integrated security = SSPI");
//is connection string incorrect?

SqlCommand cmd = new SqlCommand();

//!!The method ConvertFPSheetDataTable Returns a DataTable object//
cmd.Parameters.AddWithValue("#table",ConvertFPSheetDataTable(12,false,fpSpread2_Sheet1));
//I am trying to create temporary table     

//Here , I do a query               
cmd.CommandText = "Select col1,col2,SUM(col7) From #table group by col1,col2 Drop #table";

SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText,conn);
 DataTable dt = new DataTable();
da.Fill(dt); ***// I get an error here 'Invalid object name '#table'.'***

fpDataSet_Sheet1.DataSource = dt;

//**NOTE:** fpDataSet_Sheet1 is the grid control  
Run Code Online (Sandbox Code Playgroud)

小智 7

在两个地方将临时表从#table更改为##表.

使用##表示保持不变的全局临时表.完成任务后,您需要删除它.

Command ="Drop Table ## table"


Mar*_*ell 4

将数据放入数据库需要时间 - 因为您已经将其存储在内存中,也许 LINQ-to-Objects(带有 DataSetExtensions)是您的朋友?将 <int> 等替换为正确的类型...

        var query = from row in table.Rows.Cast<DataRow>()
                  group row by new
                  {
                      Col1 = row.Field<int>(1),
                      Col2 = row.Field<int>(2)
                  } into grp
                  select new
                  {
                      Col1 = grp.Key.Col1,
                      Col2 = grp.Key.Col2,
                      SumCol7 = grp.Sum(x => x.Field<int>(7))
                  };
        foreach (var item in query)
        {
            Console.WriteLine("{0},{1}: {2}",
                item.Col1, item.Col2, item.SumCol7);
        }
Run Code Online (Sandbox Code Playgroud)