【问题标题】:Upload multiple file using single sql query in asp.net在 asp.net 中使用单个 sql 查询上传多个文件
【发布时间】:2013-02-05 17:03:18
【问题描述】:

我正在使用文件上传控制..in asp.net..首先在临时目录中存储文件 然后当用户点击保存后,我将文件从临时移动到我想要的位置。 问题是我必须使用 for 循环并为我的插入查询进行 5 次访问数据库以插入 5 条记录。但我想为此编写单个查询。 我知道我可以发送我的图像名称以及图像路径逗号分隔。但由于我没有足够的 sql 知识,我不知道如何在 sql 中拆分逗号分隔的文件,然后使用光标插入它们。所以我请求一些在这里给我写一个示例查询。这样我就可以继续了。

【问题讨论】:

  • 你用谷歌搜索"SQL Server Split function"吗?
  • 你能显示你已经拥有的代码吗?
  • 这是代码 DataTable dtfileupload = new DataTable(); DataColumn dcID = new DataColumn("Id", typeof(int)); dtfileupload.C​​olumns.Add(dcID); dtfileupload.C​​olumns.Add("Imagename", typeof(string)); dtfileupload.C​​olumns.Add("Imagepath", typeof(string));在这个数据表中将有 3 个整体,现在我想在单个查询中将其保存在 sql 中
  • 如果有帮助请参考以下链接(了解光标用法的链接)--- sqlteam.com/forums/topic.asp?TOPIC_ID=162495

标签: asp.net sql sql-server sql-server-2008


【解决方案1】:

使用可以将数据集作为 xml 传递给存储过程,并且在存储过程中您可以使用 openXML 一次性插入多行

用于将数据集对象作为 xml 传递给存储过程的 C# 代码

         ...................................

    DataSet ds = new DataSet(); // assume dataset has records(in table object)
    string xmlString = ds.GetXml();

    SqlCommand cmd = new SqlCommand("your procedure name", "your Connection object");
    cmd.Parameters.Add(new SqlParameter("@XmlString",xmlString);
             ...................................

存储过程,使用 openXML 进行批量插入

      ...................................

  DECLARE @XMLDocPointer INT    
  EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @XmlString    

   INSERT INTO Employee
   (Name, Email, PhoneNo)    
   SELECT Name,Email,PhoneNo   
   FROM OPENXML(@XMLDocPointer,'/ROOT/DATA',2)    
   WITH  (Name VARCHAR(50),-- '@Name',     
         Email VARCHAR(50),-- '@Email',     
         PhoneNo VARCHAR(50) --'@PhoneNo')     

   EXEC sp_xml_removedocument @XMLDocPointer    
        ...................................

阅读此完整示例 http://www.codeproject.com/Articles/417181/Bulk-Insertion-of-Data-Using-Csharp-DataTable-and

================================================ =====================

如果你在 sql 中寻找分割字符串 那么下面就是你需要在sqlserver中创建的sql函数了

create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp 
table(a varchar(100))
begin    
 declare @i int    
 set @SourceSql=rtrim(ltrim(@SourceSql)) 
 set @i=charindex(@StrSeprate,@SourceSql)    
 while @i>=1    
 begin        
  insert @temp values(left(@SourceSql,@i-1))        
  set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)        
  set @i=charindex(@StrSeprate,@SourceSql)    
 end    
 if @SourceSql<>'\'       
 insert @temp values(@SourceSql)    
 return 
end
go

以及如何调用

select * from dbo.f_split('1,2,3,4,5',',')

然后使用光标就可以全部插入

拆分功能见此贴http://social.msdn.microsoft.com/forums/en-US/transactsql/thread/4126a010-6885-4eb0-b79c-c798c90edb85

【讨论】:

  • 我试过你的代码..bt什么也没发生..我的xml字符串是1Chrysanthemum.jpg/prop_images/temp/Chrysanthemum.jpg2Desert.jpg/prop_images/temp/Desert.jpg
猜你喜欢
  • 2019-01-29
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 2013-01-09
  • 1970-01-01
相关资源
最近更新 更多