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