ファイルアップロードコントロールでファイルをアップロードしています。次にストリームリーダーがファイルを読み込み、SQLデータベースにコピーします。適切な列。誰かが下のコードで何か間違っているのを見ますか?エラーメッセージは表示されませんが、IISプロセスでハングアップしているようです。私は、プロセスがまだ動作しているので、フォルダからcsvファイルを削除することはできません。sqlのバルクコピーは、ファイルストリームを使用してデータベースにデータをアップロードしません。
protected void btnUpload_Click(object sender, EventArgs e)
{
//upload file to the gencouploadfiles folder
UploadFile();
//fetch CSV file from the folder
string strFilePath = Server.MapPath("GencoUploadFiles") + "\\" + "GencoUploadFile.txt";
//perform sql bulk copy
PerformBulkCopy(GencoUpload(strFilePath));
//delete the file from the folder
}
public void UploadFile()
{
if (fileUpload1.HasFile)
{
FileInfo fileinfo = new FileInfo(fileUpload1.PostedFile.FileName);
string strCsvFilePath = Server.MapPath("GencoUploadFiles") + "\\" + "GencoUploadFile.txt";
fileUpload1.SaveAs(strCsvFilePath);
}
}
public static DataTable GencoUpload(string filepath)
{
StreamReader sr = new StreamReader(filepath);
string line = sr.ReadLine();
string[] value = line.Split('|');
DataTable dt = new DataTable();
DataRow row;
foreach (string dc in value)
{
dt.Columns.Add(new DataColumn(dc));
}
while (!sr.EndOfStream)
{
value = sr.ReadLine().Split('|');
if (value.Length == dt.Columns.Count)
{
row = dt.NewRow();
row.ItemArray = value;
dt.Rows.Add(row);
}
}
return dt;
}
public void PerformBulkCopy(DataTable dt)
{
SqlConnection conStr = new SqlConnection(ConfigurationManager.ConnectionStrings["EDI"].ConnectionString);
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(conStr.ConnectionString))
{
bulkcopy.DestinationTableName = "dbo.GencoUploadTempTable";
bulkcopy.BatchSize = dt.Rows.Count;
conStr.Open();
bulkcopy.WriteToServer(dt);
bulkcopy.Close();
conStr.Close();
}
}
DataTableではなくSqlDataReaderを使用できますか..? – MethodMan
SQLの一括コピーは正常に動作するはずですが、WindowsサービスでのみWebページで使用したことはありません。あなたは私たちにファイルサイズのアイデアを教えてもらえますか?基本的には、ファイル全体をサーバーに一括してバッチ処理しているようです。あなたはこれを行うときにサーバーのメモリ使用率を調べましたか?これは基本的にファイルをデータテーブルにロードするときにファイル全体をメモリに格納しているため、ファイルが巨大な場合にサーバーが劣化する可能性があります。 – swannee
正常に動作するはずです。ファイルはサーバーにアップロードされ、SqlBulkCopyはローカルサーバーのファイルシステムからdbに実行されます - 実際にファイルが実際にアップロードされている場合(この場合はファイルがサーバー側にロックされています;-) – dash