winformアプリケーションをSQL ServerにアーカイブするためのC#でアプリケーションを作成しています。これまではのファイルを選択してのファイルを選択し、選択した文書のパスをリストボックスに保存しました。ここでは、コードは次のとおりです。データベースに複数のファイルを挿入する#
public void btnLoad_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Multiselect = true;
dlg.Filter = "All files (*.*)|*.*";
DialogResult dlgRes = dlg.ShowDialog();
if (dlgRes == DialogResult.OK)
{
foreach (String file in dlg.FileNames)
{
listBox1.Items.Add(file);
}
}
}
私は今、何をしたいかは、データベースへOpenFileDialogに選択されているすべての文書を挿入することです。 EDIT ファイルをデータベースに挿入するコードです。
byte[] ReadFile(string sPath)
{
//Initialize byte array with a null value initially.
byte[] data = null;
//Use FileInfo object to get file size.
FileInfo fInfo = new FileInfo(sPath);
long numBytes = fInfo.Length;
//Open FileStream to read file
FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read);
//Use BinaryReader to read file stream into byte array.
BinaryReader br = new BinaryReader(fStream);
//When you use BinaryReader, you need to supply number of bytes to read from file.
//In this case we want to read entire file. So supplying total number of bytes.
data = br.ReadBytes((int)numBytes);
//Close BinaryReader
br.Close();
//Close FileStream
fStream.Close();
return data;
}
private void btnDocAdd_Click(object sender, EventArgs e)
{
var myOtherList = listBox1.Items.Cast<String>().ToList();
foreach (var f in myOtherList)
{
byte[] FileData = ReadFile(f);
string path = Path.GetFileName(f);
//Set insert query
string qry = @"Insert into FilesStore (Linja, Magazina, Arkiva, OriginalPath,FileData,Lloji, Data,NrProt, EmriDok,Perdoruesi) values(@linja,@magazina,@arkiva,@OriginalPath, @FileData, @lloji, @Data,@nrprot, @emr,@perdoru)";
//Initialize SqlCommand object for insert.
SqlCommand SqlCom = new SqlCommand(qry, con);
DateTime dt = DateTime.Now; // Use current time
string format = "dd/MM/yyyy HH:mm:ss"; // modify the format depending upon input required in the column in database
// string insert = @" insert into Table(DateTime Column) values ('" + dt.ToString(format) + "')";
//We are passing Original File Path and File byte data as sql parameters.
SqlCom.Parameters.Add(new SqlParameter("@linja", (object)cbLinja.Text));
SqlCom.Parameters.Add(new SqlParameter("@magazina", (object)cbDokMagazina.Text));
SqlCom.Parameters.Add(new SqlParameter("@arkiva", (object)cbArkiv.Text));
SqlCom.Parameters.Add(new SqlParameter("@OriginalPath", (object)f));
SqlCom.Parameters.Add(new SqlParameter("@FileData", (object)FileData));
SqlCom.Parameters.Add(new SqlParameter("@lloji", (object)cbLloji.Text));
SqlCom.Parameters.Add(new SqlParameter("@Data", (object)dt.ToString(format)));
SqlCom.Parameters.Add(new SqlParameter("@nrprot", (object)txtDocProt.Text));
SqlCom.Parameters.Add(new SqlParameter("@emr", (object)Path.GetFileNameWithoutExtension(path)));
SqlCom.Parameters.Add(new SqlParameter("@perdoru", (object)lblPerd.Text));
con.Open();
SqlCom.ExecuteNonQuery();
con.Close();
ドキュメントを1つずつ追加するとうまく動作します。しかし、複数のドキュメントを追加しようとすると、1つのドキュメントをx回追加するだけです(x =リストボックスの項目数)
にリストボックスを使用するバージョン(まだ開いていないダイアログ)でありますあなたのSQLコードを表示し、何も動作していないことを示します – BugFinder
'dlg。FileNames'はすでに文書のリスト(ファイルの内容ではなくファイル名)を含んでいます。それはあなたが投稿したコードの意図から明らかです。データベースに何かを保存する方法を尋ねる場合は、データベースに追加する方法のコード例を示す必要があります。 – Flater
デバッグ中の 'myOtherList'をチェックしましたか? –