0

私はファイルアップロードコントロールを使用しています..inasp.net..最初に一時ディレクトリにファイルを保存し、次にユーザーが保存をクリックした後、一時から目的の場所にファイルを移動します。問題は、forループを使用して、挿入クエリで5つのレコードを挿入するためにデータベースに5回アクセスする必要があることですが、そのために単一のクエリを記述したいと思います。画像名と画像パスのカンマ区切りを送信できることは知っていますが、SQLの知識が十分でないため、SQLでカンマ区切りのファイルを分割し、カーソルを使用してそれらを挿入する方法がわかりません。先に進むことができるように、ここにサンプルクエリを書いてください。

4

1 に答える 1

0

データセットを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

于 2013-02-05T17:19:03.347 に答える