当前位置: 首页 > 编程语言 > C#

分享_0

时间:2023-04-10 16:59:29 C#

在C#中使用临时表在C#中使用临时表我正在将excel表读入数据网格。从那里,我设法将网格的行读入DataTable对象。DataTable对象具有数据,因为当我将网格的数据源与该表对象等同时,网格就会被填充。我的问题:我想使用一个表对象并使用SQLServer操作它的值(即我想将它存储为一个临时表并使用C#代码中的SQL查询操作它,我希望它在一个网格中返回不同的结果.(我不知道如何在C#中使用临时表)这是单击按钮时执行的代码....SqlConnectionconn=newSqlConnection("server=localhost;integratedsecurity=SSPI");//连接字符串不正确?SqlCommandcmd=newSqlCommand();//!!ConvertFPSheetDataTable方法返回一个DataTable对象//cmd.Parameters.AddWithValue("#table",ConvertFPSheetDataTable(12,false,fpSpread2_Sheet1));//我正在尝试创建临时表//在这里,我做了一个查询cmd.CommandText="Selectcol1,col2,SUM(col7)From#tablegroupbycol1,col2Drop#table";SqlDataAdapterda=newSqlDataAdapter(cmd.CommandText,conn);DataTabledt=newDataTable();da.Fill(dt);***//我在这里收到错误消息“无效的对象名称‘#table’。”***fpDataSet_Sheet1.DataSource=dt;//**NOTE:**fpDataSet_Sheet1是gridcontrol在两处把临时表从#table改成##table。使用##表示保留的全局临时表。完成任务后,您需要将其删除。Command="DropTable##table"将数据放入数据库需要时间-因为您已经将其保存在内存中,也许LINQ-to-Objects(带有DataSetExtensions)是您的朋友?用正确的类型替换等...varquery=fromrowintable.Rows.Cast()grouprowbynew{Col1=row.Field(1),Col2=row.Field(2)}intogrpselectnew{Col1=grp.Key.Col1,Col2=grp.Key.Col2,SumCol7=grp.Sum(x=>x.Field(7))};foreach(variteminquery){Console.WriteLine("{0},{1}:{2}",item.Col1,item.Col2,item.SumCol7);我认为您不能按照您的想法在SQL中创建临时表,因为它只存在于在流程范围内创建它的查询/存储。如果电子表格是标准格式-这意味着您知道列并且它们总是相同的,您可能想在SQL中创建一个表来放入它。有一个名为SqlBulkCopy的快速方法//批量加载报告SqlBulkCopybulkCopy=newSqlBulkCopy(connectionString);//映射列foreach(DataColumncolindataTable.Columns)bulkCopy.ColumnMappings.Add(col.ColumnName,col.ColumnName);bulkCopy.DestinationTableName="SQLTempTable";bulkCopy.WriteToServer(dataTable);但是,如果我没有正确理解你的问题,你不需要使用SQLserver来修改DataTable中的数据。您可以使用JET引擎为您获取数据。//对于CSVconnStr=string.Format("Provider=Microsoft.JET.OLEDB.4.0;DataSource={0};ExtendedProperties='Text;HDR=Yes;FMT=Delimited;IMEX=1'",Folder);cmdStr=string.Format("SELECT*FROM[{0}]",FileName);//对于XLSconnStr=string.Format("Provider=Microsoft.JET.OLEDB.4.0;DataSource={0}{1};ExtendedProperties='Excel8.0;HDR=Yes;IMEX=1'",Folder,文件名);cmdStr="从[Sheet1$]中选择*";OleDbConnectionoConn=newOleDbConnection(connStr);OleDbCommandcmd=newOleDbCommand(cmdStr,oConn);OleDbDataAdapterda=newOleDbDataAdapter(cmd);oConn.Open();da.Fill(数据表);oConn.Close();此外,在您的代码中,您询问连接字符串是否正确。我不这么认为(但我可能是错的)。如果你的不起作用试试这个。connectionString="DataSource=localhost;database=;IntegratedSecurity=SSPI"providerName="System.Data.SqlClient"如果我??不明白您想要什么,请原谅我。如果要在Excel工作表上执行SQL查询,可以直接执行。或者,您可以使用SQLServer查询excel(OPENROWSET或我不记得的函数)。使用这种方法,您可以使用excel表连接到sqlserver表,马克的建议是另一种看待它的方式。也许您可以使用DataView。您可以从现有的DataTable创建它。dv=newDataView(数据表名称);然后,您可以使用DataView的方法来过滤(应用SQLWHERE子句)或对数据进行排序。您还可以使用Find来查找匹配的行,或使用FindLines来查找所有匹配的行。一些过滤器:dv.RowFilter="Country='USA'";dv.RowFilter="EmployeeID>5ANDBirthdateSort:dv.Sort="City"查找行:查找名为“JohnSmith”的客户。vals(0)="John"vals(1)="Smith"i=dv.Find(vals)其中i是包含客户的行的索引。将这些应用到DataView之后,您可以将网格绑定到DataView。从命令文本更改Selectcol1,col2,SUM(col7)From#tablegroupbycol1,col2以上就是C#学习教程:在c#中使用临时表分享所有内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多关注---Selectcol1,col2,SUM(col7)From@#tablegroupbycol1,col2本文整理自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如有请注明出处: